Neste artigo mostro uma forma de usar o JInternalFrame dentro de um JDesktopPane de forma simples e elegante para criar aplicações MDI, onde todas as telas do sistema abrem dentro de uma única janela.
Essa é a classe do tipo JInternalFrame que usaremos para instanciar as demais.
Dois parâmetros são passados durante a instanciação. O primeiro é o título da janela. O segundo indica a classe pai dos objetos que serão instanciadas por essa classe.
Vejamos o código da classe Tela:
class Tela extends JInternalFrame {
//classe pai dos objetos que serão instanciadas por essa classe
private Menu telaPrincipal;
//método construtor da tela
public Tela(String titulo, Menu telaPrincipal) {
//reescreve o método construtor da classe pai, ajustando o título da janela (neste caso)
super(titulo,true,true,true,true);
setSize(300,200);
setVisible(true);
this.telaPrincipal = telaPrincipal;
telaPrincipal.jdPane.add(this);
}
}
O título é usado no construtor pelo método super(), que sobrescreve o construtor da classe pai, alterando assim o título da página. Os quatro "true" ativam os botões minimizar/maximizar, restaurar e fechar de cada JInternalFrame.
Abaixo está o código completo e sem os comentários:
import java.awt.event.*;
import javax.swing.*;
public class Menu extends JFrame implements ActionListener {
private JMenuBar jmPrincipal = new JMenuBar();
private JMenu jmCadastro = new JMenu("Cadastros");
private JMenuItem jmCadCliente = new JMenuItem("Cliente");
private JMenuItem jmCadFornecedor = new JMenuItem("Fornecedor");
public JDesktopPane jdPane = new JDesktopPane();
Tela telaCadCliente, telaCadFornecedor, telaCadProduto;
public static void main(String args[]) {
Menu menu = new Menu();
}
[1] Comentário enviado por renangomes em 25/10/2008 - 16:43h
Cara, realmente esse seu método ai de usar os JinternalFrame É bem mais elegante do que a forma altamente desorganizada que eu aprendei. Muito boa sua dica, vou dá uma melhorada nos meus códigos apartir de agora =)
Abraço.
Website: http://www.distribuicoeslinux.com.br
[3] Comentário enviado por fredcrs em 07/11/2008 - 09:12h
Olha muito bom o artigo, me ajudou bastante, mas quanto aos ouvintes dos eventos fazer o que você fez não é a melhor prática de OO.
O ideal segundo o livro Java! Use a Cabeça, é implementar uma classe interna para cada evento, inves de usar event.getSource() com o if.
Assim se houver uma alteração no código basta apenas alterar uma das classes internas.
Ate mais!
[4] Comentário enviado por nukelinux em 17/12/2008 - 15:15h
Realmente, fredcrs, essa não é a melhor forma de implementar eventos, mas é a forma mais simples.
A idéia desse artigo é apenas mostrar uma forma de utilizar o JInternalFrame de forma mais eficiente, por isso deixei a implementação dessa forma. Nada impede que o código seja adaptado para utilizar classes internas no tratamento de eventos. Na verdade, também considero a melhor solução.
Eu busquei fazer o tutorial do jeito mais simples, para que seja apenas um "ponto de início", aberto a mudanças e melhorias.
[5] Comentário enviado por staltux em 01/02/2009 - 08:03h
só uma coisa...
se eu crio uma tela ....fecho ela...e tento criar dnovo...nao cria pela segunda vez...
acho que teria de colocar para setar a tela como null quando ela é fechada...nao seria isso?
estranho...quando a janela é fechada o objeto nao é destruido? isso ja deveria bastar para dar um nullPointerExeption, logo deveria bastar para setar a tela como null...fiquei boiando agora...
[8] Comentário enviado por nukelinux em 02/03/2009 - 13:12h
a melhor forma de fazer isso é implementar o tratamento de eventos na janela. Para isso, podemos utilizar o WindowEvent para realizar uma tarefa quando a janela é fechada. Nesse link há um exemplo de utilização disponibilizado pela sun:
[10] Comentário enviado por informatos em 02/08/2012 - 00:27h
desculpa a minha ignorancia mas eu tambem sou novato em java e estou tentando chamar nesse menu principal um outro form de fora dessa classe que eu ja tinha criado, o form entra mas nao fica igual aos demais, tem alguma configuração para isso?
[11] Comentário enviado por franckiteixeira1 em 05/06/2015 - 09:26h
Ajuda por favor ..... Não sei muito sobre java.... mais e copiei o codigo ai de cima .... Para tenta aprende ... esta funcionando , mais como faço para implementa ... Tipo assim ...
a JInternalFrame abre ai la dentro tenho uma fomulario de cadastro .
[12] Comentário enviado por nukelinux em 05/06/2015 - 12:57h
franckiteixeira1 vc tem q colocar os elementos do formuário e o layout para organizar eles dentro do JInternalFrame.
Aqui tem um exemplo de como criar esse formulário. Basta adaptar: http://www.vivaolinux.com.br/script/Agenda-em-Java