javaでjavax.swing.JButtonを無効にする方法は?
-
06-07-2019 - |
質問
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();
}
}