Представьте, что я делаю простой текстовый процессор с помощью Java Swing. У меня есть набор действий, написанных для выравнивания текста. В MenuBar у меня есть меню:
View
Left Justify
Center Jusitfy
Right Justify
Он состоит из JRadioButtonMenuItems и ButtonGroup, чтобы обеспечить выбор только одного элемента в любой момент времени.
Кроме того, представьте, что у меня есть эквивалентная панель инструментов, состоящая из JToggleButtons и снова ButtonGroup, чтобы гарантировать, что только одна кнопка может быть активной в любой момент времени.
JRadioButtonMenu и JToggleButton "Выравнивание по левому краю" инициализируются с использованием одного и того же действия и т. д. с другими элементами.
У меня такой вопрос: как лучше всего синхронизировать две группы? Если я нажму значок "Выровнять по правому краю" на панели инструментов, я хочу, чтобы группа в меню обновлялась соответствующим образом, и наоборот.
Ответ 1 · рейтинг 2 · arooaroo
После долгих поисков я нашел информацию здесь . По сути, вы можете добавить это в метод actionPerformed вашего действия:
action.putValue(Action.SELECTED_KEY, Boolean.TRUE);
И это сделает всю работу за вас!
К сожалению, официальные руководства Sun не освещают этот аспект (или, по крайней мере, я его не заметил), поэтому трудно найти такой простой подход к решению моей проблемы.
Ответ 2 · рейтинг 1 · Philippe Carriere
Шаблон Observer, мой друг. Строка меню наблюдает за панелью инструментов, а панель инструментов наблюдает за строкой меню. Они будут и наблюдателями, и наблюдаемыми. У каждого есть свой слушатель, который при изменении события уведомляет наблюдателя (другого) о новом значении параметра.
Одно из больших преимуществ шаблона наблюдателя заключается в том, что связь очень низка, поэтому вам не потребуется много рефакторинга для реализации связи, ее изменения или удаления в будущем.