Добавить PropertyChangeListener для нескольких JComboBox - PullRequest
0 голосов
/ 03 января 2012

У меня есть таблица с JComboBoxes, и я хочу добавить PropertyChangeListener к каждому JComboBox, потому что некоторые выборы в комбинированных списках должны изменить выбор других JComboBoxes.

Я не могу добавить всех этих слушателей вручную, потому что их очень много.

Я инициализирую ComboBox с массивом, поэтому я уже пытался добавить прослушиватель при создании JComboBox следующим образом:

comboBox[i].addPropertyChangeListener(new PropertyChangeListener()

Но это не сработало, потому что переменная поля i не является окончательной, и мне нужна эта переменная.

Как я могу сохранить эту переменную в comboBox или есть другая возможность решить эту проблему?

Ответы [ 4 ]

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

Если вы можете создать все эти комбинированные списки, вы также можете добавить «все эти слушатели» вручную. Есть несколько вариантов:

  • Вы создаете нового слушателя каждый раз, когда создаете новый комбинированный список, и передаете этот индекс i этому слушателю (либо по анонимному классу, внутреннему классу, либо по полному классу) или путем создания окончательной копии, как предложил Фрэнсис Аптон. в своем ответе
  • Если вам нужно это i только для получения поля со списком, из которого произошло событие, вы также можете позвонить event#getSource (который доступен как на ActionEvent, так и на PropertyChangeEvent, так как ваш вопрос не понятно про тип слушателя). В этом случае вы можете создать слушателя только один раз или создать одного слушателя для каждого комбинированного списка
0 голосов
/ 03 января 2012

В вашем цикле вы можете скопировать i в другую конечную переменную и обратиться к этой последней переменной в вашем ActionListener.

0 голосов
/ 03 января 2012

Вместо использования анонимного класса создайте реальный класс, который реализует интерфейс, который вас интересует. Таким образом, вы можете передать индекс со списком (или даже экземпляр со списком, если это все, что вам нужно).

0 голосов
/ 03 января 2012

Вы можете расширить JComboBox и инициализировать то, что вы хотите в конструкторе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...