2012-01-19 13 views
0

私はGUIプログラムを作成しており、ファイルを開くJbuttonのAbstractActionを持っています。 JComboBoxには、開かれたファイルのリストがあります。 JComboBoxのAbstractActionは、開いているファイルのいずれかに変更されます。アクションは発生しますが、JComboBoxのリストを更新するとキャンセルJComboBox actionEvent

実際にファイルを開くときにJComboBoxアクションが起動し、JComboBoxを使用するとアクションが1回発生し、次に更新が2回発生します。

JComboBoxリストを更新するだけでイベントを停止する方法はありますか?ビューと-2-アクションとは思わない、代わりに多くの-ビューチェンジ - 最先端のシングルを考える:答えは特にconcersの分離には、設計であり、事前

+6

。または、ブール値フィールドで制御されるアクションを持つこともできます。 –

+0

イベントを呼び出させるだけでなく、AbstractAction actionPerformedメソッドの中にチェックを入れた方が効率的ですが、削除、再追加が効率的ですか?現在のところ、新しいファイルの名前が更新されたものと等しいかどうかを確認し、そうであれば、イベントで発生するもののほとんどをスキップします。 –

答えて

3

感謝データ。擬似コードで

のようなもの:あなたはリスナーを削除してから再度追加することができます

// data class 
public class MyOpenFilesBean { 

    private File currentFile; 

    public void setCurrentFile(File current) { 
     File old = getCurrentFile(); 
     this.currentFile = current; 
     firePropertyChange("currentFile", old, getCurrentFile()); 
    } 

    public File getCurrentFile() { 
     return currentFile; 
    } 

} 

// view wiring (view --> data) 

Action open = new AbstractAction(...) { 

     public void actionPerformed(...) { 
      File choosenFile = // grab it from whereever in the view 
      myOpenFileBean.setCurrentFile(choosenFile); 
     } 

}; 
myButton.setAction(open); 
myComboBox.setAction(open); 

// view wiring (data --> view) 

PropertyChangeListener l = new PropertyChangeListener() { 
    public void propertyChanged(...) { 
     if ("currentFile".equals(evt.getPropertyName()) { 
       // a method implemented to update f.i. the combo selection 
       updateView((File) evt.getNewValue()); 
     } 
    } 
}; 
myOpenFileBean.addPropertyChangeListener(l);