質問

swingsアプリケーションを作成しましたが、「開始」があります。 GUIのボタン。 「開始」をクリックしたときはいつでもそれが欲しいボタン、開始ボタンを無効にし、「停止」ボタンを押す必要があります。ボタンを有効にします。

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

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

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

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

" repaint()"では機能しません。

編集:

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

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

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

役に立ちましたか?

解決

  

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

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

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

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

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

他のヒント

  

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

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

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

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

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

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

これは動作します。

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

}

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top