Java绘制的对象未正确更新
我一直在玩Java的2d绘画工具,遇到了一个障碍。我正在尝试移动这些对象。代码如下:Java绘制的对象未正确更新,java,swing,2d,paint,Java,Swing,2d,Paint,我一直在玩Java的2d绘画工具,遇到了一个障碍。我正在尝试移动这些对象。代码如下: import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Test extends JPanel{ private int[] location = new int[2]; @Override protecte
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test extends JPanel{
private int[] location = new int[2];
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillArc(location[0], location[1], 100, 100, 45, 90);
g.setColor(Color.black);
g.fillArc((location[0]+50-10),(location[1]+50-10), 20, 20, 0, 360);
new Timer(2000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setLocation((location[0]+50),50);
repaint();
System.out.println("repainting");
}
}).start();
}
public void setLocation(int x, int y){
this.location[0] = x;
this.location[1] = y;
}
public static void main(String[] args){
JFrame jf=new JFrame();
jf.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
jf.setPreferredSize(new Dimension(300,500));
jf.setLocation(100,100);
jf.add(new Test());
jf.pack();
jf.setVisible(true);
}
}
这仅将两个对象中的一个绘制到屏幕上。。。这似乎是第二个,因为当我在[1]上更改setLocation的参数时,它所绘制的对象会移动。有什么想法吗?谢谢
编辑:编辑上面的代码以反映下面所说的内容 您正在以默认方式向JFrame添加两个组件。这将添加组件BorderLayout.CENTER,因此第二个组件将覆盖并遮挡第一个组件。您需要阅读布局管理器来解决此问题。另外,请阅读Swing计时器中的简单动画,因为即使代码编写正确,也不会生成动画 如果要移动图形,则
- 只使用一个测试JPanel
- 重写JPanel的
方法,而不是paintComponent(…)
方法paint(…)
- 调用
方法是paintComponent方法重写中的第一件事super.paintComponent(g)
- 给出Test-JPanel公共方法,允许外部类更改位置,而无需直接使用字段。为了安全起见,将位置字段(名称应以小写字母开头)设为私有
- 使用Swing计时器定期调用此方法并更改位置,然后在JPanel上调用
repaint()
setLocation(…)
方法看起来还可以。好的,我编辑了上面的代码,我可以肯定地看到事情将如何进行。也就是说,如果我只使用一个测试,我仍然不知道如何绘制多个这种类型的对象。“我将如何完成我以前试图完成的任务?”皮特从JPanel中抽象出一个结构。为您的图形JPanel提供这些家伙的集合,然后在paintComponent方法中迭代集合中的每个项目。