отменить JComboBox actionEvent - PullRequest
0 голосов
/ 19 января 2012

Я пишу программу с графическим интерфейсом и у меня есть AbstractAction для Jbutton, который открывает файл.В JComboBox у меня есть список файлов, которые были открыты.AbstractAction для JComboBox изменится на любой из файлов, которые были открыты.Когда я обновляю список для JComboBox, хотя действие запускается.

Поэтому, когда я фактически открываю файл, запускается действие JComboBox, а когда я использую JComboBox, действие запускается один раз, а затем при обновлении.событие при обновлении списка JComboBox?

Заранее спасибо

1 Ответ

3 голосов
/ 19 января 2012

Ответ заключается в дизайне, в частности в разделении концепций: не думайте «взгляд с двумя действиями», а думайте «многие представления изменяют состояние отдельных данных».

В псевдокоде что-то вроде:

// 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);
...