我在使用以下代码中的重绘方法时遇到问题。请建议如何使用重绘方法,以便更新我的屏幕以获得小动画。 这是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class movingObjects extends JPanel {
Timer timer;
int x = 2, y = 2, width = 10, height = 10;
public void paintComponent(final Graphics g) { // <---- using repaint method
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
g.setColor(Color.red);
g.drawOval(x, y, width, height);
g.fillOval(x, y, width, height);
x++;
y++;
width++;
height++;
}
};
new Timer(100, taskPerformer).start();
}
}
class mainClass {
mainClass() {
buildGUI();
}
public void buildGUI() {
JFrame fr = new JFrame("Moving Objects");
movingObjects obj = new movingObjects();
fr.add(obj);
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setSize(1300, 700);
}
public static void main(String args[]) {
new mainClass();
}
}
答案 0 :(得分:2)
不要试图延迟实际的绘画。当要求涂漆时,需要对组件进行涂漆。
相反,请使用您的计时器修改MovingObjects
中的某些状态。在您的情况下,您要更改的州是x
,y
,width
和height
。当计时器触发时,递增这些值并调用repaint()
。
然后在paintComponents
方法中,您只需使用这些值来绘制组件
public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawOval(x,y,width,height);
g.fillOval(x,y,width,height);
}
不确定你遇到了什么问题,但是调用repaint()并不困难:
ActionListener taskPerformer=new ActionListener() {
public void actionPerformed(ActionEvent ae) {
x++;
y++;
width++;
height++;
repaint();
}
};
new Timer(100,taskPerformer).start();