我正在尝试学习2D图形。下面的代码描绘了几个旋转轮。为了让它们刷新,我终于在paint方法中插入了重绘(1000),但是我知道它有时会不必绘制。
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
for(int angle=0; angle<360; angle+=90){
g2.setColor(blue);
g2.fillArc(100,100,200,200,theta1 + angle,45);
g2.setColor(red);
g2.fillArc(100,100,200,200,theta1 + angle + 45,45);
}
for(int angle=0; angle<360; angle+=30){
g2.setColor(green);
g2.fillArc(250,250,250,250,angle + theta2,15);
g2.setColor(yellow);
g2.fillArc(250,250,250,250,angle + theta2 + 15,15);
}
// repaint(1000);
}
public static void main(String s[]) {
JFrame f = new JFrame("ShapesDemo2D");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
JApplet applet = new ShapesDemo2D();
f.getContentPane().add("Center", applet);
applet.init();
f.pack();
f.setSize(new Dimension(800,800));
f.setVisible(true);
while(true) {
theta2 += 5;
theta1 -= 2;
f.repaint(1000);
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
我真正想做的是在我做出改变后刷新它。 Main创建applet后引用了paint,但f.repaint()似乎没有做任何事情。 (如果我在paint中注释掉repaint(),它就不会更新)。我做错了什么?
答案 0 :(得分:3)
阅读
对您有利我也会看看
所有这些都在Swing中显示动画原理和自定义图形
答案 1 :(得分:0)
您为JFrame(而不是JApplet)编写了代码,尽管它们都可以实现WindowListener并且都可以访问paint(Graphics g)方法。