1

「残り時間」に近い整数を1ずつ減らし、毎秒再描画しようとしていますが、ウィンドウのサイズを常に変更した場合にのみ変更を確認できます。WindowsのJcreator 3とUbubtu 11.10コマンドラインでこれを試しましたが、まだ機能しません。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import javax.imageio.*;

class StatusPanel extends JPanel implements ActionListener {

    int time = 60;
    int round = 1;
    Timer timer;

    public StatusPanel() {
        this.timer = new Timer(1000, this);
        this.timer.start();
        this.setVisible(true);
        this.setDoubleBuffered(true);
    }

    public void updateTime() {
        if (time > 0) {
            time--;
        }
    }

    public void paint(Graphics page) {

        super.paint(page);

        page.setFont(new Font("TimesRoman", Font.PLAIN, 30));
        String sTime = String.valueOf(time);
        String sRound = String.valueOf(round);


        page.setColor(Color.WHITE);
        page.drawString(sTime, 253, 149);
        page.drawString(sRound, 230, 105);
    }

    public void actionPerformed(ActionEvent event) {

        this.updateTime();
    }
}
4

1 に答える 1

1
public void updateTime(){
    if (time>0) time--;
}

が変更された場合time、コンポーネントを再描画する必要があります。ただし、Swingは通常、コンポーネントを静的オブジェクトと見なし、コンポーネントを継続的に再描画しません。コンポーネントを再ペイントすることをSwingに伝える必要があります。

public void updateTime(){
    if (time>0){
        time--;
        this.repaint();
    }
}

ちなみに、ゼロに達したらタイマーを停止する必要があります。使用されなくなったようです。

于 2013-03-23T07:52:39.873 に答える