为什么我调用repaint()方法后,我的java.awt.Window没有重绘?如何重新绘制java.awt.Window?
public class Counter extends Window implements ActionListener {
private static final long serialVersionUID = 1L;
private Timer timer;
private int time;
public Counter() {
super(null);
setAlwaysOnTop(true);
setBounds(getGraphicsConfiguration().getBounds());
setBackground(new Color(0, true));
setVisible(true);
timer = new Timer(1000, this);
timer.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.clearRect(0, 0, getWidth(), getHeight());
g.setColor(Color.RED);
g.drawString(String.valueOf(time), getWidth()/2, getHeight()/2);
}
@Override
public void update(Graphics g) {
super.update(g);
}
@Override
public void actionPerformed(ActionEvent e) {
time++;
repaint();
}
正如你所看到的,我创建了一个延迟1秒的计时器。之后,我打电话repaint()在屏幕上绘制计数器的号码。但它只在我的屏幕上绘制一个零点,然后停止绘制(零点停留在屏幕上)。首先,我认为paint方法只被调用一次,但我测试了一个System.out.prinln(),并且证明paint方法每秒执行一次,所以它实际上应该重新绘制窗口...所以我不知道在哪里我犯了一个错误。
是的,我打算使用awt.Window,而不是一个JFrame或逐帧等。
确定你的actionperformed方法被调用?在你的println()里面的油漆中打印你的时间变量,以确保它正在被更新。 –
@GordonAllocman是的先生,actionperformed被调用,我测试了它,时间也在计数0,1,2,3 .... – AvarionDE
明确调用该组件的“无效”方法。这迫使重绘,因为整个包含器无效(并强制重新布局组件)。 – Jorge