【发布时间】:2019-04-01 21:30:57
【问题描述】:
我正在实现一个简单的Canvas,其中可以像现实生活中的人一样用纸和铅笔绘制项目,而无需在每次绘制对象时清除整个页面。
到目前为止我所拥有的......
一个Canvas实现绘图:
public class Canvas extends JPanel {
private final Random random = new Random();
public Canvas() {
setOpaque(false); // I thought setting this flag makes the drawn pixels be preserved...
}
@Override
public Dimension getPreferredSize() {
return new Dimension(640, 480);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(random.nextInt(getWidth()), random.nextInt(getHeight()), 5, 5);
}
}
Window 作为一个实际的窗口:
public class Window extends JFrame {
public Window(Canvas canvas) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(canvas);
pack();
setVisible(true);
}
}
还有带有应用程序入口点的Controller。还会启动一个计时器,以便每秒调用 Canvas 上的 repaint 以强制绘制另一个圆圈。
public class Controller {
public static void main(String[] args) {
Canvas canvas = new Canvas();
SwingUtilities.invokeLater(() -> new Window(canvas));
new Timer(1000, e -> canvas.repaint()).start();
}
}
问题是每当绘制一个新的圆圈时,前一个圆圈就会被清除。似乎还有一些过程将JPanel 或整个JFrame 填充为白色。
【问题讨论】: