我启动计时器然后打电话 paintRect
重新绘制眼睛并产生眨眼效果,但它不起作用。我打电话来 paintEye
再次画左眼,但用黄色。
我还在努力学习 ActionListener
工作,所以我不确定我是否得到它的权利,这看起来不像无论如何。
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class Content extends JPanel {
public Content() {
}
@Override
public void paintComponent(Graphics g) {
//face
g.setColor(Color.yellow);
g.fillOval(10, 10, 200, 200);
//eyes
g.setColor(Color.black);
g.fillOval(55, 65, 30, 30);
g.fillOval(135, 65, 30, 30);
//mouth
g.setColor(Color.black);
g.fillOval(50, 110, 120, 60);
//touchUp
g.setColor(Color.YELLOW);
g.fillRect(50, 110, 120, 30);
g.fillOval(50, 120, 120, 40);
time.start();
paintEye(super.getComponentGraphics(g));
//eyesAgain
g.setColor(Color.black);
g.fillOval(55, 65, 30, 30);
}
public void paintEye(Graphics grphcs) {
grphcs.setColor(Color.yellow);
grphcs.fillOval(55, 65, 30, 30);
}
Timer time = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
});
}
1条答案
按热度按时间pdkcd3nj1#
你有问题(如评论中所述)
计时器的actionlistener应该更改示例字段的状态,比如一个名为
blink
. 我只需切换它的值:blink = !blink;
,然后打电话repaint()
您的paintcomponent应该使用这个布尔值来决定要画什么,是睁眼还是闭眼不要在paintcomponent方法中启动或停止计时器,而是在其他地方(如构造函数中)这样做。绘制方法只用于绘制和绘制,因为您不能完全控制何时调用或是否调用它,而且您实际上只需要调用它
start()
在程序开始时打开计时器一次。您的paintcomponent方法必须调用其super的方法,首先要清除任何“脏”像素,例如闭眼或睁眼图像:
e、 一个简单的切换程序