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:
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.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 } });
¿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.