1

私はJavaスイングデスクトップアプリケーションを開発しています。ダイアログ フォームには、[OK] ボタンと [キャンセル] ボタンがあります。ユーザーが [OK] ボタンをクリックすると、アプリケーションは何らかの処理を行います。[OK] ボタンのイベントの実行が完了する前に、ユーザーが [OK] を再度クリックできないようにするにはどうすればよいですか。また、ok の実行が完了するまでユーザーがキャンセル ボタンを押せないようにします。どんな助けでも大歓迎です。

4

5 に答える 5

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

于 2011-11-15T09:12:14.033 に答える
1

すべてのコントロールを無効にする場合は、を使用することをお勧めしGlassPaneます。詳細については、こちらを参照してください: http: //docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html

于 2011-11-15T09:39:54.547 に答える
0

あなたが欲しいのは待っているカーソルのようなもののようです。

于 2011-11-15T09:25:20.423 に答える
0

最も簡単な方法は、クリックした直後にボタンを無効にし、実行した操作が完了したら再度有効にすることです。

于 2011-11-15T08:38:41.027 に答える
0

yourButton.setEnabled(false); のようにボタンを無効にすることができます。処理メソッド中に実行し、終了したら再度有効にします。

于 2011-11-15T08:41:08.457 に答える