Cordiais saudações, pessoal do GUJ.
Estou com uma dúvida séria, um item de menu deve acionar uma classe que extende um JInternalFrame, a partir do evento de sua seleção no menu. Utilizando classes JPanel o código fica assim:
miGuiAbas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiAbas label = new GuiAbas();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
Note que miGuiAbas é um item de um menu e esse trecho de código aciona a classe GuiAbas, que é uma classe extendida de JPanel. O objeto cotentPane é um Container que é limpo pelo método removeAll(), adiciona o objeto label (que é da clase GuiAbas) e com o método validate() o programa funciona. Mas agora eu quero acionar uma classe que, nada mais é do que uma janela do windows vazia e laranja, com minimizar, maximizar, fechar e alteração de tamanho com o mouse.
Como devo proceder?
Veja abaixo o código da classe GuiFrameInterno:
package cap08;
import java.awt.*;
import javax.swing.JInternalFrame;
/**
* @author Ronaldo R. Godoi
*/
public class GuiFrameInterno extends JInternalFrame {
public GuiFrameInterno() {
inicializarComponentes();
}
private void inicializarComponentes() {
setTitle("Usando Frame Interno");
setSize(300, 100);
setResizable(true);
setClosable(true);
setMaximizable(true);
setIconifiable(true);
setBackground(Color.orange);
setVisible(true);
}
}
Assim eu fiz executar essa classe através de um evento de menu parecido com o evento mostrado no início deste tópico, exemplo do miGuiAbas. O Container vai aceitar a JInternalFrame. Porém não vai permitir que eu altere o tamanho da janela com o mouse, também não vai permitir que eu minimize a janela, ou maximize. A janela (usando Container) vai ter um tamanho fixo e só vai aceitar o comando de fechar.
Uma solução é declarar o objeto contentPane como JDesktopPane, ao invés de Container. Isso resolve meus problemas com o JInternalFrame que passa a funcionar completamente (minimizar, maximizar, alterar tamanho, etc) porém a classe do menu sofrendo essa alteração não permite que as outras classes que usam este menu sejam acionadas. Isto porque são classes que extendem a classe JPanel e não JInternalFrame. As classes JPanel não estão funcionando como o objeto contentPane sendo JDesktopPane. Essas classes (JPanel) precisam que esse objeto seja Container.
Assim, ou eu funciono apenas a janela de (JInternalFrame) ou eu funciono todos os outros exemplos de classes que extendem o JPanel.
E aí como eu resolvo isso, para funcional tanto JPanel como JInternalFrame?
Atenciosamente, grato,
Ronaldo
P.S.: Segue abaixo o código do menu com todos os tratamentos de eventos e nomes das classes que deixam de funcionar.
package cap08;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*
* @author Ronaldo R. Godoi
*/
public class GuiMenuPrincipal extends JFrame {
private JDesktopPane contentPane;
private JMenuBar mnBarra;
private JMenu mnArquivo, mnExemplos;
private JMenuItem miSair, miBotao, miCaixaSelecao, miGuiRadio,
miGuiLabel, miGuiLista, miGuiListaComFotos, miGuiCombo,
miGuiAreaDeTexto, miGuiDialogoMensagem,
miGuiDialogoConfirmacao, miGuiDialogoOpcao, miGuiBarraRolagem,
miGuiBarraProgresso, miGuiAbas, miGuiFrameInterno;
public GuiMenuPrincipal() {
inicializarComponentes();
definirEventos();
}
private void inicializarComponentes () {
setTitle("Menu Principal");
setBounds(0, 0, 1000, 800);
// contentPane = getContentPane() Essa linha não poderia ser comentário
contentPane = new JDesktopPane(); // linha nova (não permite que outras classes funcionem)
setContentPane(contentPane); // linha nova (não permite que outras classes funcionem)
mnBarra = new JMenuBar();
mnArquivo = new JMenu("Arquivo");
mnArquivo.setMnemonic('A');
mnExemplos = new JMenu("Exemplos");
mnExemplos.setMnemonic('E');
miSair = new JMenuItem("Sair", new ImageIcon("c:/icones/sair2.jpg"));
miSair.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.ALT_MASK));
miBotao = new JMenuItem("Botao");
miGuiRadio = new JMenuItem("Radio Button para sexo")
miCaixaSelecao = new JMenuItem("Caixa Seleção");
miGuiLabel = new JMenuItem("Formatação de Labels e Imagens");
miGuiLista = new JMenuItem("Calcula valor com desconto");
miGuiListaComFotos = new JMenuItem("Lista com Fotos");
miGuiCombo = new JMenuItem("GUI Combo dos Estados do Sudeste");
miGuiAreaDeTexto = new JMenuItem("GUI área de texto (teste de editor)");
miGuiDialogoMensagem = new JMenuItem("Exemplos de JOptionPane.showMessageDialog");
miGuiDialogoConfirmacao = new JMenuItem("Exemplos de JOptionPane.showConfirmDialog");
miGuiDialogoOpcao = new JMenuItem("Exemplos de JOptionPane.showOptionDialog");
miGuiBarraRolagem = new JMenuItem("Barra de Rolagem");
miGuiBarraProgresso = new JMenuItem("Barra de Progresso");
miGuiAbas = new JMenuItem("Abas em um JPanel");
miGuiFrameInterno = new JMenuItem("GUI Frame Interno")
mnArquivo.add(miSair);
mnExemplos.add(miBotao);
mnExemplos.add(miCaixaSelecao);
mnExemplos.add(miGuiRadio);
mnExemplos.add(miGuiLabel);
mnExemplos.add(miGuiLista);
mnExemplos.add(miGuiListaComFotos);
mnExemplos.add(miGuiCombo);
mnExemplos.add(miGuiAreaDeTexto);
mnExemplos.add(miGuiDialogoMensagem);
mnExemplos.add(miGuiDialogoConfirmacao);
mnExemplos.add(miGuiDialogoOpcao);
mnExemplos.add(miGuiBarraRolagem);
mnExemplos.add(miGuiBarraProgresso);
mnExemplos.add(miGuiAbas);
mnExemplos.add(miGuiFrameInterno);
mnBarra.add(mnArquivo);
mnBarra.add(mnExemplos);
setJMenuBar(mnBarra);
}
private void definirEventos() {
miSair.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
miBotao.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// aqui vai o código para chamar o exemplo 8.3
GuiBotao botao = new GuiBotao();
contentPane.removeAll();
contentPane.add(botao);
contentPane.validate();
}
});
miCaixaSelecao.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiCaixaOpcao label = new GuiCaixaOpcao();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiRadio label = new GuiRadio();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiLabel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiLabel label = new GuiLabel();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiLista.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiLista label = new GuiLista();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiListaComFotos.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiListaComFotos label = new GuiListaComFotos();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiCombo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiCombo label = new GuiCombo();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiAreaDeTexto.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiAreaDeTexto label = new GuiAreaDeTexto();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiDialogoMensagem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiDialogoMensagem label = new GuiDialogoMensagem();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiDialogoConfirmacao.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiDialogoConfirmacao label = new GuiDialogoConfirmacao();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiDialogoOpcao.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiDialogoOpcao label = new GuiDialogoOpcao();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiBarraRolagem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiBarraRolagem label = new GuiBarraRolagem();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiBarraProgresso.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiBarraProgresso label = new GuiBarraProgresso();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiAbas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiAbas label = new GuiAbas();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
miGuiFrameInterno.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GuiFrameInterno label = new GuiFrameInterno();
contentPane.removeAll();
contentPane.add(label);
contentPane.validate();
}
});
}
public static void abrir() {
GuiMenuPrincipal frame = new GuiMenuPrincipal();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((tela.width - frame.getSize().width) / 2,
(tela.height - frame.getSize().height) / 2);
frame.setVisible(true);
}
}