Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Синхронизируйте JMenu ButtonGroups с JToolbar ButtonGroups

Автор вопроса: arooarooОтветов: 5

Представьте, что я делаю простой текстовый процессор с помощью Java Swing. У меня есть набор действий, написанных для выравнивания текста. В MenuBar у меня есть меню:

View
  Left Justify
  Center Jusitfy
  Right Justify

Он состоит из JRadioButtonMenuItems и ButtonGroup, чтобы обеспечить выбор только одного элемента в любой момент времени.

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

JRadioButtonMenu и JToggleButton "Выравнивание по левому краю" инициализируются с использованием одного и того же действия и т. д. с другими элементами.

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

javamenutoolbaractionswing

Ответы

Ответ 1 · рейтинг 2 · arooaroo

После долгих поисков я нашел информацию здесь . По сути, вы можете добавить это в метод actionPerformed вашего действия:

action.putValue(Action.SELECTED_KEY, Boolean.TRUE);

И это сделает всю работу за вас!

К сожалению, официальные руководства Sun не освещают этот аспект (или, по крайней мере, я его не заметил), поэтому трудно найти такой простой подход к решению моей проблемы.

Ответ 2 · рейтинг 1 · Philippe Carriere

Шаблон Observer, мой друг. Строка меню наблюдает за панелью инструментов, а панель инструментов наблюдает за строкой меню. Они будут и наблюдателями, и наблюдаемыми. У каждого есть свой слушатель, который при изменении события уведомляет наблюдателя (другого) о новом значении параметра.

Одно из больших преимуществ шаблона наблюдателя заключается в том, что связь очень низка, поэтому вам не потребуется много рефакторинга для реализации связи, ее изменения или удаления в будущем.

Ответ 3 · Boris Pavlović

Взгляните на шаблон проектирования посредника.

Ответ 4 · willcodejavaforfood

Если вы используете действия Swing, компоненты должны автоматически отключаться/включаться, если само действие включено. Вы также можете зарегистрироваться в качестве прослушивателя свойства для действия, а также отслеживать другие изменения. Посмотрите на http://java.sun.com/javase/6/docs/api/javax/swing/Action.html для подробного списка доступных свойств.

Ответ 5 · Philippe Carriere

С другой стороны (опять я), вы можете просто написать 1 слушателя во внешнем классе. Слушатель для меню и для панели инструментов. Когда 1 изменяется, слушатель устанавливает для них обоих новое значение.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы