web-dev-qa-db-ja.com

javaでjavax.swing.JButtonを無効にする方法は?

Swingsアプリケーションを作成しました。GUIには「開始」ボタンがあります。 「スタート」ボタンをクリックするたびに、スタートボタンを無効にし、「ストップ」ボタンを有効にする必要があります。

そのために、「開始」ボタンの「ActionPeformed(...)」メソッドに次のコードを記述しました。

startButton.setEnabled(false);
stopButton.setEnabled(true);

ただし、上記のコードは、GUIに必要な影響を与えません。

上記のコードは私がやりたいことに対して正しいですか?

「repaint()」でも動作しません。

編集:

コードが非常に長いため、すべてのコードを貼り付けることはできません。ただし、コードについては詳しく知ることができます。

「開始」ボタンの「ActionPeformed」メソッドで、上記の2つのステートメントを呼び出した後、「SwingWorker」スレッドを実行しています。

このスレッドは問題を引き起こしていますか?

23
Yatendra Goel

そのために、「開始」ボタンの「ActionPeformed(...)」メソッドに次のコードを記述しました。

そのコードは、[スタート]ボタン自体ではなく、[スタート]ボタンに登録されているActionListeneractionPerformed(...)にある必要があります。

次のような単純なActionListenerを追加できます。

JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
        startButton.setEnabled(false);
        stopButton.setEnabled(true);
     }
   }
 );

ローカルスコープで匿名リスナーを作成する場合、上記の例では、上記のstartButtonがfinalである必要があることに注意してください。

26
akf

コードが非常に長いため、すべてのコードを貼り付けることはできません。

コードが機能しない理由はいくつかあります。ボタン変数を2回宣言したので、実際にボタンの有効化/無効化を変更することはありません。たぶん、あなたはEDTをブロックしています。

フォーラムに投稿するには、 [〜#〜] sscce [〜#〜] を作成する必要があります。

問題を特定するのはあなた次第です。 2つのボタンを持つシンプルなフレームから始めて、コードが機能するかどうかを確認します。動作するようになったら、10秒間だけスリープするスレッドを開始して、まだ動作するかどうかを確認してください。

200行のプログラムを作成する前に、まず基本がどのように機能するかを学びます。

いくつかの基本的なデバッグ方法を学びましょう。私たちは読者ではありません。問題の口頭での説明に基づいて、あなたがしている愚かな間違いを推測することはできません。

7
camickr

これは動作します。

public class TestButton {

public TestButton() {
    JFrame f = new JFrame();
    f.setSize(new Dimension(200,200));
    JPanel p = new JPanel();
    p.setLayout(new FlowLayout());

    final JButton stop = new JButton("Stop");
    final JButton start = new JButton("Start");
    p.add(start);
    p.add(stop);
    f.getContentPane().add(p);
    stop.setEnabled(false);
    stop.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(true);
            stop.setEnabled(false);

        }
    });

    start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(false);
            stop.setEnabled(true);

        }
    });
    f.setVisible(true);
}

/**
 * @param args
 */
public static void main(String[] args) {
    new TestButton();

}

}

3
broschb