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.

¿Fue útil?

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.

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top