2011-11-15 9 views
1

私は、Javaスイングデスクトップアプリケーションを開発しています。ダイアログフォームにはOKとキャンセルボタンがあります。ユーザーが[OK]ボタンをクリックすると、アプリケーションはの処理を行います。 okボタンのイベントが実行される前に、ユーザーがもう一度okをクリックするのを止める方法を教えてください。また、私はokボタンが実行されるまでキャンセルボタンを押すことができないようにしたい。どんな助力も高く評価されます。ユーザーによるイベントの生成を停止するにはどうすればよいですか?

答えて

0

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

+0

しかし、どのような私のダイアログ上の多くのボタンがある場合ですが、私は継続的に有効および無効にする必要がありますが、それはメンテナンスの悪夢になる可能性があります。詳細はこちらを参照してください。それを行うためのより優雅な方法があるはずです。 – Will

0

yourButton.setEnabled(false)のようにボタンを無効にすることができます。あなたの処理方法の間、そしてそれが終わる時に再びそれを可能にする。

+0

私は実際に – Will

+0

の上に追加した、pheromixにコメントを参照してください。..いや、アクションでそれを設定し、そこsetIdleあるもの – kleopatra

5

有効化管理は、UIロジックの不可欠な部分です。アクションは、あなたがそうすることができます:

Action action = new AbstractAction("myAction") { 

     public void actionPerformed(ActionEvent e) { 
      setEnabled(false); 
      doPerform(); 
      setEnabled(true); 
     } 
}; 
button.setAction(action); 

は用心:長期実行中のタスクがEDT上で実行されてはならないので、これが唯一の短期的なためであるので、第二またはを防ぐために効果

を持つクリック

編集

はちょうどそれがさらに簡単です、あなたはjsr296で質問をタグ付けされたことに気づいた:あなたは@Actionとしてプレゼンテーションモデルの方法をタグ付けし、モデル

のプロパティにそのEnabledプロパティをバインドすることができます
@Action (enabledProperty == "idle") 
public void processOk() { 
    setIdle(false); 
    doStuff; 
    setIdle(true); 
} 

プラスタスクのサポート(多くの議論が、使用可能)があります:基本的にSwingWorkerのは、きめ細かいbeanifiedライフサイクルサポートと

+0

を状態管理を行う代わりに、直接、ボタンの状態をいじるませんか? – Will

+1

モデルのBeanプロパティ。 – kleopatra

0

あなたがしたいことはwaiting cursorのようなものであるようです。

関連する問題