pessoal,
tenho um formulário com um menu e outros componentes em classes diferentes, preciso que a partir de um evento no menuitem, alterar o jPanel do formulario.
ALguém tem algum exemplo ?
Os componentes do formulário são:
JMenu com seus JMenuItem
um JDesktop, e diversos JPanel associados com o JDesktop, que deverão ser mostrados ou não a depender do clique no menu …
valeu
Você poderia tentar usar um JPanel que usa java.awt.CardLayout e associar os JPanels a esse JPanel
A CardLayout object is a layout manager for a container. It treats each component in the container as a card. Only one card is visible at a time, and the container acts as a stack of cards. The first component added to a CardLayout object is the visible component when the container is first displayed.
(se bem que sou mais a favor de usar um JTabbedPane).
O que você vai ter é apenas um JInternalFrame que vai alternar os JPanels?
Aí está:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Principal extends JFrame{
private JDesktopPane desktopPane;
private JMenuItem menuItem1, menuItem2;
private JMenuBar menuBar;
private JMenu menu;
private Controlador controlador;
public Principal(){
super("Exemplo de JDesktopPane");
desktopPane = new JDesktopPane();
controlador = new Controlador(desktopPane);
int inset = 50;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(inset, inset,
screenSize.width - inset*2,
screenSize.height - inset*2);
menuItem1 = new JMenuItem("Painel Amarelo");
menuItem1.setActionCommand("menuItemAmarelo");
menuItem1.addActionListener(controlador);
menuItem2 = new JMenuItem("Painel Verde");
menuItem2.setActionCommand("menuItemVerde");
menuItem2.addActionListener(controlador);
menuBar = new JMenuBar();
menu = new JMenu("Opções");
menu.add(menuItem1);
menu.add(menuItem2);
setContentPane(desktopPane);
menuBar.add(menu);
setJMenuBar(menuBar);
setVisible(true);
setResizable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]){
Principal p = new Principal();
}
}
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
public class Controlador extends InternalFrameAdapter implements ActionListener{
private JDesktopPane desktopPane;
private JPanel umPanel;
private JInternalFrame iFrame;
private boolean estaAberto = true;
private JPanelAmarelo panelAmarelo;
private JPanelVerde panelVerde;
private Container container;
public Controlador(JDesktopPane desktopPane){
this.desktopPane = desktopPane;
panelAmarelo = new JPanelAmarelo();
panelVerde = new JPanelVerde();
iFrame = new JInternalFrame("InternalFrame Mutante", true, true, true, true);
iFrame.setName("IFrame");
iFrame.setLayout(new BorderLayout());
container = iFrame.getContentPane();
iFrame.addInternalFrameListener(this);
desktopPane.add(iFrame);
}
public void actionPerformed(ActionEvent evt){
String menuSelecionado = evt.getActionCommand();
if(menuSelecionado.equals("menuItemAmarelo")){
if(!estaAberto){
desktopPane.add(iFrame);
}
container.removeAll();
container.add(panelAmarelo, BorderLayout.CENTER);
iFrame.revalidate();
iFrame.pack();
iFrame.setVisible(true);
estaAberto = true;
}
else if(menuSelecionado.equals("menuItemVerde")){
if(!estaAberto){
desktopPane.add(iFrame);
}
container.removeAll();
container.add(panelVerde, BorderLayout.CENTER);
iFrame.revalidate();
iFrame.pack();
iFrame.setVisible(true);
estaAberto = true;
}
}
public void internalFrameClosing(InternalFrameEvent e){
String nomeFrame = ((JInternalFrame)e.getSource()).getName();
if(nomeFrame.equals("IFrame")){
estaAberto = false;
}
}
}
import javax.swing.JPanel;
import java.awt.*;
public class JPanelVerde extends JPanel{
public JPanelVerde(){
super();
setPreferredSize(new Dimension(300, 400));
setBackground(Color.GREEN);
}
}
import javax.swing.JPanel;
import java.awt.*;
public class JPanelAmarelo extends JPanel{
public JPanelAmarelo(){
super();
setPreferredSize(new Dimension(300, 400));
setBackground(Color.YELLOW);
}
}
:thumbup:
Valeu cara, mas me diz uma coisa … como eu faço pra tirar a barra superior do JInternalFrame o, queria que ele ocupasse toda a área do JDesktop, sem aparecer a barra de maximizar e tal, isso é possível ?
valeu!
Então… até onde eu sei só é possível criar um JInternalFrame sem os botões de maximizar, fechar, etc… e sem título, usando um contrutor sem parâmetros.
Criando esse tipo de JInternalFrame, e deixando ele maximizado, a única coisa que o usuário poderia fazer seria movimentá-lo.
Mas se você sempre vai trabalhar desta maneira, com o JPanel maximizado, e sem a possibilidade de o usuário fechá-lo, poderia deixar de lado o JInternalFrame, e usar um JPanel no Container do JFrame mesmo, pegando toda a área disponível.
Qualquer coisa posta aí…
[]'s