0

Swing にsetScreen(int stage)は、パラメータに応じて特定のボタンを非表示または非表示にすると呼ばれるいくつかのボタンを非表示および表示するメソッドがありstageます。メソッドを呼び出して、数秒待ってから、次のコードのようにもう一度呼び出します。

... //Here stage has been assigned to some value

setScreen(stage);

if (stage != STAGE_TWO) {
  sleep(WAIT_TIME * 1000);
  stage = WELCOME;
  setScreen(stage);
}

のコードsetScreen(int stage)は次のようなものです。

void setScreen(int stage) {
    switch (stage) {
        case WELCOME:
            screen.infoLabel.setText("Welcome!");
            screen.startButton.setVisible(true);
            break;

        case STAGE_TWO:
            screen.infoLabel.setText("We are in stage two!");
            screen.startButton.setVisible(false);
            break;
    }

    screen.validate();
}

screen は、JFrame を拡張するクラスのインスタンス化です。

ここでの問題はsetScreen(stage)、変更がコミットされる前にスレッドがスリープ状態になるため、最初のものが表示されないことです。システムの時間をチェックするwhileループをスリープに置き換えてみましたが、効果は同じです。

**編集: ** 推奨される StackOverflow スレッドで、有用な Swing Timer に関する情報を見つけました。私はそれに取り組み、私が行った有用な進歩をアップロードします.

4

1 に答える 1

1

イベント ディスパッチ スレッドをスリープ状態にしています。それをしないで使用してください:

javax.swing.Timer timer = new javax.swing.Timer(WAIT_TIME * 1000, new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        if (stage != STAGE_TWO) {
            stage = WELCOME;
            setScreen(stage);
        }
    }
});
timer.start();

if条件は、要件に応じてタイマー全体の場合があります

于 2014-06-19T04:57:25.113 に答える