26

スイング アプリケーションを作成しました。GUI に [開始] ボタンがあります。その「開始」ボタンをクリックするたびに、開始ボタンを無効にし、「停止」ボタンを有効にする必要があります。

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

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

しかし、上記のコードは GUI に望ましい効果をもたらしていません。

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

「repaint()」でも機能しません。

編集:

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

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

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

4

3 に答える 3

34

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

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

ActionListener次のように簡単に追加できます。

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

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

于 2009-10-26T16:48:43.933 に答える
7

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

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

フォーラムに投稿するには、 SSCCEを作成する必要があります。

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

200行のプログラムを書く前に、まず基本的な仕組みを学びましょう。

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

于 2009-10-26T17:13:32.760 に答える
3

これは機能します。

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();

}

}

于 2009-10-26T16:52:20.573 に答える