2009-08-13 8 views
5

Imagine que estoy haciendo un procesador de textos simple con Java Swing. Tengo un conjunto de Acciones escritas para realizar la justificación del texto. En el menú de Tengo un menú:Sync JMenu ButtonGroups con JToolbar ButtonGroups

 
View 
    Left Justify 
    Center Jusitfy 
    Right Justify 

Este consiste en JRadioButtonMenuItems y una ButtonGroup que exista un sólo elemento está seleccionado en un momento dado.

Además, imagine que tengo una barra de herramientas equivalente que consiste en JToggleButtons y de nuevo un ButtonGroup para asegurar que solo el botón puede estar activo en cualquier momento.

El "Justificar a la Izquierda" JRadioButtonMenu y JToggleButton se inicializan usando la misma Acción, y así sucesivamente con los otros elementos.

Mi pregunta es esta: ¿cuál es el mejor método para sincronizar los dos grupos? Si hago clic en el ícono "Justificar a la derecha" en la barra de herramientas, quiero que el grupo en el Menú se actualice en consecuencia, y viceversa.

Respuesta

2

I después de mucho buscar encontré información here. 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!

Lamentablemente, los tutoriales oficiales de Sun no cubren este aspecto (o al menos no lo detectaron), de ahí la dificultad de detectar un enfoque tan simple para resolver mi problema.

+0

Esto solo funciona en Java 6. –

0

Tome un vistazo a la Mediator Design Pattern

+0

Gracias. Pero parece que se necesita una gran cantidad de refactorización para aplicar este patrón. Parece que si hiciera esto tendría que codificar específicamente para cada uno de los artículos. Tenía la esperanza de que haya una forma más inteligente de determinar esto automáticamente, dado que los elementos del menú y los elementos de la barra de herramientas comparten las mismas acciones. – arooaroo

1

Observer pattern mi amigo. La barra de menú observa la barra de herramientas y la barra de herramientas observa la barra de menú. Ambos serán observadores y observables. Cada uno tiene su propio oyente que, en un evento de cambio, notifica al observador (el otro) con el nuevo valor en el parámetro.

Una de las grandes ventajas del patrón de observador es que hay un acoplamiento muy bajo, por lo que no es necesario mucha refactorización para implementar el enlace, modificarlo o eliminarlo en el futuro.

0

Por otro lado (yo de nuevo), podría escribir 1 oyente en una clase externa. Un oyente para el menú y para la barra de herramientas. Cuando 1 cambia, el oyente los establece a ambos en el nuevo valor.