【发布时间】:2012-11-14 19:40:51
【问题描述】:
我目前正在尝试编写一个 Java 应用程序,该应用程序将允许徒手绘图,然后可以移动和删除每个绘制的曲线。
我猜我最好的选择是让每次点击和拖动都创建一个单独的实体,但我不知道如何实现这一点。到目前为止,我只有一个小的 JFrame,它将在 Oracle 教程的帮助下显示一个“画笔”,但甚至没有这个画笔绘制的线条。
class MyPanel extends JPanel {
private int ovalX = 50;
private int ovalY = 50;
public MyPanel() {
setBorder(BorderFactory.createLineBorder(Color.black));
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
moveSquare(e.getX(),e.getY());
}
});
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
moveSquare(e.getX(),e.getY());
}
});
}
private void moveSquare(int x, int y) {
int OFFSET = 1;
if ((ovalX!=x) || (ovalY!=y)) {
ovalX=x;
ovalY=y;
repaint();
}
}
public Dimension getPreferredSize() {
return new Dimension(250,200);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillOval((ovalX - 5),(ovalY - 5),10,10);
}
}
我不知道该如何继续。我应该先阅读一些通用教程吗?如果是这样,在什么主题上?
【问题讨论】:
-
“我猜我最好的选择是让每次点击和拖动都创建一个单独的实体,但我不知道如何实现。” 不要忘记用于生成图形的
Color、Stroke、RenderingHints等。这比你想象的要艰难。在为 paint undo/redo functionality 创建其中许多内容的可序列化版本的过程中途完成后,我决定创建结果的BufferedImage并存储它会更容易。 -
我的想法很理想,是的,存储某种曲线的光栅图像,而不是存储它的所有点和属性。那么,我会注意查看一些 BufferedImage 教程。
标签: java swing animation graphics paintcomponent