1

На моем графическом интерфейсе swing у меня есть строки данных и несколько кнопок, пользователь выбирает несколько элементов, а затем выбирает кнопку.Instanceof, Enum или несколько прослушивателей для JButtons

Каждая кнопка применяет другое правило к данным, поэтому для каждой кнопки нужно вызывать разные функции, я использую шаблон проектирования MVC, и мой вопрос таков: как мне обрабатывать различные потребности каждой кнопки?

  1. Создать класс «MyButton», который проходит JButton затем дать этому какое-то Enum, я могу затем создать 1 действие слушателя, а затем проверить, какая кнопка была нажата в ActionListener путем проверки Enum.

  2. Как и выше, но с другим классом для каждой кнопки, а затем с помощью instanceof для определения того, что было нажато.

  3. Реализовать отдельный ActionListener для каждой кнопки

  4. Другое?

Каков наилучший способ использования, если таковой имеется? Любые советы были бы очень благодарны!

ответ

1

Внедрите отдельный слушатель для каждой кнопки.

Во-первых, потому что это обычное решение. Во-вторых, между тем нет причин расширять JButton только для того, чтобы делать что-то еще, когда его щелкают. Это роль ActionListener. Компоненты качания рассчитаны на как есть, и вы, как правило, не должны удлинить.

+0

Я думал, что это будет правильный метод, я был обеспокоен количеством кода, которое он произвел бы, потому что в настоящее время слушатели содержатся в контроллере, но теперь я их выведу и сделаю их внешними, спасибо –

0

Это MVC: вы разделяете логику (в действии) и вид (кнопку).

Нет необходимости использовать перечисление или подкласс JButton. Что вы можете сделать, чтобы сохранить чистоту, когда у вас есть десятки кнопок, является фабричным классом для создания экземпляров Action.

0

Если у вас есть вопрос правильно, вы хотите сказать, что у вас есть данные в позициях, и у каждой позиции есть кнопка, которая при нажатии вызывает правило, относящееся к позиции.

Если да, то

  • Если взять 2 подхода, вам нужно закодировать внутри действий слушателя каждый раз, когда новая запись добавлена ​​в будущем.
  • Третий подход также будет иметь тот же последствия, как и выше

Первый подход звучит очень хорошо. У вас может быть Factory, у которого может быть hashmap с ключами перечисления и соответствующим правилом. Внутри прослушивателя действий получите правило с фабрики и вызовите его.

Таким образом, вы получаете надлежащее разделение проблем, и ваш слушатель действия будет действовать как контроллер, не владея правилами и элементами данных.

Смежные вопросы