Como devo programar um sistema MDI.
Já criei a tela principal, agora preciso criar as telas que se abrirão dentro da principal.
Li algum que dizia que isto tem que ser feito com jInternalFrame. Até ai tudo bem, mas como proceder. Os formularios internos devem ser criados em classes diferentes? Devem ser criados na mesma classe do formulario principal?
importjava.awt.BorderLayout;importjava.awt.Dimension;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.beans.PropertyVetoException;importjavax.swing.JDesktopPane;importjavax.swing.JFrame;importjavax.swing.JInternalFrame;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;/** * Exemplo aplicação MDI * @arquivo ExemploMdi.java * @author 30/11/2004 15:35:00 - Rodrigo G. Tavares de Souza [black_fire] */publicclassExemploMdiextendsJFrame{/** * Método que será executado quando o menu * for clicado, que neste caso será gerado * um novo frame MDI e será exibido no * JDesktopPane. * @param e Recebe o evento */privatevoidmnNovoPerformed(ActionEvente){/* Veja que aki estou usando a classe base * porém poderia ser por exemplo um tela sua * que estivesse extendendo JInternalFrame, * algo tipo: * JInternalFrame mdiFrame = new MeuFrameCadastroCliente(); */JInternalFramemdiFrame=newJInternalFrame("Novo Frame MDI #"+String.valueOf(nrForm++),true,//resizabletrue,//closabletrue,//maximizabletrue//iconifiable);// Tamanho do FramemdiFrame.setSize(newDimension(300,250));// Qual procedimento será executado ao fechar o framemdiFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);// Deixa o frame visivelmdiFrame.setVisible(true);// Adiciona o frame no DesktopPanegetMdiPane().add(mdiFrame);// Posiciona o framemdiFrame.setLocation(fx,fy);// Incrementa as váriaveis para posicionar os frames em cascatafx+=10;fy+=10;// Tenta enviar o foco para o frame criado try{mdiFrame.setSelected(true);}catch(PropertyVetoExceptionex){}}/** * Adiciona os eventos na aplicação */privatevoidaddEvent(){mnNovo.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){mnNovoPerformed(e);}});}/** * Este componente é um container resposável * por exibir os formulários * @return Painel que exibe os formulários MDI */privateJDesktopPanegetMdiPane(){if(mdiPane==null){mdiPane=newJDesktopPane();}returnmdiPane;}/** * Inicalização do menu superior da aplicação. * @return Barra de menu Superior */privateJMenuBargetMainMenu(){if(mainMenu==null){mainMenu=newJMenuBar();mnPrinc=newJMenu("Principal");mnPrinc.setMnemonic(KeyEvent.VK_P);mnNovo=newJMenuItem("Novo");mnNovo.setMnemonic(KeyEvent.VK_N);mnPrinc.add(mnNovo);mainMenu.add(mnPrinc);}returnmainMenu;}/** * Inicializa componentes do formulários */privatevoidinitialize(){// Seta o layout para BorderLayoutthis.getContentPane().setLayout(newBorderLayout());// Adiciona compomentes no formuláriothis.getContentPane().add(getMainMenu(),BorderLayout.NORTH);this.getContentPane().add(getMdiPane(),BorderLayout.CENTER);// Adiciona evento que irá criar um novo formulárioaddEvent();// Configura o Frame principal para exibi-lothis.setSize(newDimension(640,480));this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);this.setTitle("Exemplo Aplicação MDI");this.show();}/** * Construtor básico, chama métodos para inicialização * do componentes do formulário */publicExemploMdi(){initialize();}publicstaticvoidmain(String[]args){ExemploMdiapp=newExemploMdi();}privateJMenuBarmainMenu=null;privateJMenumnPrinc=null;privateJMenuItemmnNovo=null;privateJDesktopPanemdiPane=null;publicstaticintnrForm=1;publicstaticintfy=0;publicstaticintfx=0;}