我知道在摇摆中没有直接替换java.awt.Canvas
,我知道I'm supposed to use a JPanel并覆盖paintComponent
,例如:
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.drawOval(0, 0, 100, 100);
}
这会在创建时在JPanel上绘制一个黑色圆圈。我遇到的问题是我需要一个动态画布:我希望能够根据用户输入绘制内容,并连续重绘,而不是只在应用程序启动时重绘一次。一个例子是在画布上有一个移动物体,需要以每秒60帧的速度重新绘制。如何在不使用AWT组件的情况下实现这一目标?
编辑:我的意思是,在一个实际的画布中,我可以在我的代码中随意调用drawOval
,这样会在画布上绘制一个椭圆形;这对JPanel来说是否可行?
答案 0 :(得分:3)
存储要绘制的信息(例如Shape
或其中一组)并从Swing repaint()
中调用Timer
。每次调用paintComponent(..)
方法时,首先调用super(..)
方法擦除以前的图形,然后迭代形状列表,必要时移动它们,然后绘制每个图形。
答案 1 :(得分:2)
以下是一种方法:
public class Renderer extends JComponent implements ActionListener {
private int x;
public Renderer() {
Timer timer = new Timer(1000/60, this);
timer.start();
x = 0;
}
@Override
public void paintComponent(Graphics g) {
super.paint(g);
// drawing code
g.setColor(Color.black);
g.drawOval(x, 0, 100, 100);
}
private void update() {
this.x++;
}
@Override
public void actionPerformed(ActionEvent e) {
update();
repaint();
}
}
现在只需将其添加到您的组件(JPanel或其他):
comp.add(new Renderer());