ButtonGroups sincronización JMenu con JToolBar ButtonGroups
Pregunta
Imagínese que estoy haciendo un simple procesador de textos con Java Swing. Tengo un conjunto de acciones por escrito para realizar la justificación del texto. En el menú de Tengo un menú:
View Left Justify Center Jusitfy Right Justify
Esto consiste en JRadioButtonMenuItems y un ButtonGroup para asegurar que sólo un elemento se selecciona en un momento dado.
Además, imagino que tengo una barra de herramientas equivalente consiste en JToggleButtons una y otra vez para asegurar que sólo ButtonGroup único botón puede estar activa en un momento dado.
La "justificación a la izquierda" JRadioButtonMenu y JToggleButton se inicializan utilizando la misma acción, y así sucesivamente con los otros elementos.
Mi pregunta es la siguiente: ¿cuál es el mejor método para sincronizando los dos grupos? Si hago clic en "Derecha Justificar" icono en la barra de herramientas, quiero que el grupo en el menú que se actualiza en consecuencia, y viceversa.
Solución
I después de mucho buscar encontré información aquí . Básicamente, se puede añadir que este método actionPerformed de su acción:
action.putValue(Action.SELECTED_KEY, Boolean.TRUE);
Y esto va a hacer todo el trabajo por usted!
Por desgracia los tutoriales oficiales Sun no cubren este aspecto (o al menos yo no lugar que), de ahí la dificultad en la detección de un enfoque tan sencillo de resolver mi problema.
Otros consejos
patrón Observer mi amigo. La barra de menús observe la barra de herramientas y la barra de herramientas observe la barra de menú. Ambos estarán observador y observable. Cada uno tiene su propio oyente, que, en un evento de cambio, notifique el observador (el otro) con el nuevo valor del parámetro.
Una de las grandes ventajas del patrón de observador es que no es muy bajo acoplamiento, por lo que no necesita una gran cantidad de refactorización para poner en práctica la vinculación, para modificarlo o para eliminarlo en el futuro.
Tome un vistazo a la href="http://en.wikipedia.org/wiki/Mediator_pattern" rel="nofollow patrón de diseño
Si está utilizando las acciones de Swing los componentes deben ser desactivados / activado automáticamente si la acción es en sí. Puede registrarse como propertyListener a una acción así para monitorear otros cambios. Mira http://java.sun.com/ JavaSE / 6 / docs / api / javax / swing / Action.html para la lista detallada de las propiedades que están disponibles.
Por otro lado (mi otra vez), sólo podría escribir 1 oyente en una clase externa. Un detector para el menú y la barra de herramientas. Cuando 1 cambia, el que escucha a los dos establece en el nuevo valor.