私はJavaスイングデスクトップアプリケーションを開発しています。ダイアログ フォームには、[OK] ボタンと [キャンセル] ボタンがあります。ユーザーが [OK] ボタンをクリックすると、アプリケーションは何らかの処理を行います。[OK] ボタンのイベントの実行が完了する前に、ユーザーが [OK] を再度クリックできないようにするにはどうすればよいですか。また、ok の実行が完了するまでユーザーがキャンセル ボタンを押せないようにします。どんな助けでも大歓迎です。
5 に答える
イネーブルメント管理は、UIロジックの不可欠な部分です。アクションはそうするのに役立ちます:
Action action = new AbstractAction("myAction") {
public void actionPerformed(ActionEvent e) {
setEnabled(false);
doPerform();
setEnabled(true);
}
};
button.setAction(action);
注意:長時間実行されるタスクはEDTで実行してはならないため、これは短期間のものであり、2回目程度のクリックが影響を与えるのを防ぎます。
編集
質問にjsr296のタグを付けたことに気付いたので、さらに簡単です。プレゼンテーションモデルのメソッドに@Actionのタグを付け、その有効なプロパティをモデルのプロパティにバインドできます。
@Action (enabledProperty == "idle")
public void processOk() {
setIdle(false);
doStuff;
setIdle(true);
}
さらに、タスクのサポート(多くの議論がありますが、使用可能)があります:基本的に、きめ細かいBean化されたライフサイクルサポートを備えたSwingWorker
すべてのコントロールを無効にする場合は、を使用することをお勧めしGlassPane
ます。詳細については、こちらを参照してください: http: //docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html
あなたが欲しいのは待っているカーソルのようなもののようです。
最も簡単な方法は、クリックした直後にボタンを無効にし、実行した操作が完了したら再度有効にすることです。
yourButton.setEnabled(false); のようにボタンを無効にすることができます。処理メソッド中に実行し、終了したら再度有効にします。