Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/04/2009, 11:15
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Actualizar JPanels de un típico JFrame

Hola, despues de mirar unos libros e Internet no termino de aclararme de como se pueden/deben actualizar los distintos paneles que conforman un JFrame. Los ejemplos que veo en libros son básicos y todo el código está escrito en una sola clase.

Mi caso es el típico BorderLayout donde existen 4 Paneles:

Código:
public class MainFrame extends JFrame {

		setLayout(new BorderLayout());
		
		JPanel northPanel = new NorthPanel();
		add(northPanel,BorderLayout.NORTH);
		
		Box southPanel = new SouthPanel();
		add(southPanel,BorderLayout.SOUTH);
		
		JPanel westPanel = new WestPanel();
		add(westPanel,BorderLayout.WEST);
		
		JPanel eastPanel = new EastPanel();
		add(eastPanel,BorderLayout.EAST);
		
		Box centerPanel = new CenterPanel();
		add(centerPanel,BorderLayout.CENTER);

Cada uno de estos Paneles es una clase Java situada en un fichero distinto. Por ejemplo el EastPanel contiene una serie de botones y el CenterPanel contiene un TabbedPane.

Yo quiero que cuando se ejecute un método del CenterPanel automáticamente se modifique la vista del EastPanel (por ejemplo que se active uno de los botones), es decir, que los componentes del EastPanel cambien según las indicaciones.

He conseguido tener la gestión de los eventos del CenterPanel, tal como:

Código:
public class CenterPanel extends Box {

public CenterPanel() {
.....

XXX.addPropertyChangeListener(new PropertyChangeListener(){
	public void propertyChange(PropertyChangeEvent event) {
		firePropertyChangeEvent(new PropertyChangeEvent(this,"propertyCualquiera",false,false));
	}
});

De esta forma, en mi JFrame puedo leer cuando se ha ejecutado el método del CenterPanel que es el que debería hacer activar un botón del EastPanel. He aquí como me ha quedado el código:

Código:
public class MainFrame extends JFrame {

setLayout(new BorderLayout());
		
JPanel northPanel = new NorthPanel();
add(northPanel,BorderLayout.NORTH);

Box southPanel = new SouthPanel();
add(southPanel,BorderLayout.SOUTH);
		
JPanel westPanel = new WestPanel();
add(westPanel,BorderLayout.WEST);
	
JPanel eastPanel = new EastPanel();
add(eastPanel,BorderLayout.EAST);

Box centerPanel = new CenterPanel();
add(centerPanel,BorderLayout.CENTER);

centerPanel.addPropertyChangeListener(new PropertyChangeListener() {
	public void propertyChange(PropertyChangeEvent evt) {
		System.out.println("CENTERPANEL leyendo");
                // ¿COMO HAGO AQUÍ PARA HACER CAMBIAR AL EASTPANEL?
               //eastPanel.hazAlgo()      <--- Esto no se puede, dice que no esta definido en la clase, aunque yo si tengo el método
	}
});
En este punto consigo que cuando ejecuto un método en CenterPanel, desencadeno un PropertyChange desde el CenterPanel y esto es leido en el MainFrame. He intentado crear un método en EastPanel para llamarlo e intentar que ahí se activen los botones pero no puedo hacer esta llamada.

¿Alguna idea para hacer cambiar un botón que esté en otro Panel del JFrame? ¿Como se gestionan pues este tipo de casos? Porque supongo que mi problema es bastante común.

Un saludo.