なぜ私のjava.awt.Windowはrepaint()メソッドを呼び出した後に再描画しないのですか?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 yep sir、actionperformedが呼び出されました。私はテストしました、時間は0,1,2,3 ... – AvarionDE
このコンポーネントの「無効化」メソッドを明示的に呼び出すこれは、コンテナ全体を無効にして(そしてコンポーネントを再レイアウトするよう強制するため)、再描画を強制します。 – Jorge