importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassPrincipalextendsJFrame{privateJDesktopPanedesktopPane;privateJMenuItemmenuItem1,menuItem2;privateJMenuBarmenuBar;privateJMenumenu;privateInternalFrameUmframeUm;privateInternalFrameDoisframeDois;publicPrincipal(){super("Exemplo de JDesktopPane");intinset=50;DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();setBounds(inset,inset,screenSize.width-inset*2,screenSize.height-inset*2);desktopPane=newJDesktopPane();menuItem1=newJMenuItem("InternalFrameUm");menuItem1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){if(frameUm==null){frameUm=newInternalFrameUm();frameUm.setVisible(true);desktopPane.add(frameUm);}elseif(!frameUm.isVisible()){frameUm.setVisible(true);desktopPane.add(frameUm);}}});menuItem2=newJMenuItem("InternalFrameDois");menuItem2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){if(frameDois==null){frameDois=newInternalFrameDois();frameDois.setVisible(true);desktopPane.add(frameDois);}elseif(!frameDois.isVisible()){frameDois.setVisible(true);desktopPane.add(frameDois);}}});menuBar=newJMenuBar();menu=newJMenu("Opções");setContentPane(desktopPane);menu.add(menuItem1);menu.add(menuItem2);menuBar.add(menu);setJMenuBar(menuBar);setVisible(true);setResizable(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicstaticvoidmain(Stringargs[]){Principalp=newPrincipal();}}
dê uma olhada aqui também…
É só substituir os noms pelos que você precisa!
Se eu entendi, você quer que sempre haja somente uma única JInternalFrame… tente isso:
importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassPrincipalextendsJFrame{privateJDesktopPanedesktopPane;privateJMenuItemmenuItem1,menuItem2;privateJMenuBarmenuBar;privateJMenumenu;privateJInternalFrameframe;publicPrincipal(){super("Exemplo de JDesktopPane");intinset=50;DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();setBounds(inset,inset,screenSize.width-inset*2,screenSize.height-inset*2);desktopPane=newJDesktopPane();menuItem1=newJMenuItem("InternalFrameUm");menuItem1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){if(frame!=null)frame.dispose();frame=newInternalFrameUm();frame.setVisible(true);desktopPane.add(frame);}});menuItem2=newJMenuItem("InternalFrameDois");menuItem2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){if(frame!=null)frame.dispose();frame=newInternalFrameDois();frame.setVisible(true);desktopPane.add(frame);}});menuBar=newJMenuBar();menu=newJMenu("Opções");setContentPane(desktopPane);menu.add(menuItem1);menu.add(menuItem2);menuBar.add(menu);setJMenuBar(menuBar);setVisible(true);setResizable(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicstaticvoidmain(Stringargs[]){Principalp=newPrincipal();}}
Galera… qualquer correção/melhoria, por favor, sintam-se à vontade para críticas construtivas
[]'s :thumbup:
Luiz_Gustavo
hehehehe… é que fiz assim só pra mostrar a idéia.
pra resolver isso, você pode fazer com que sua JFrame implemente ActionListener, e no método actionPerformed(ActionEvent evt) você identifica qual item de menu foi clicado, e faz a devida chamada à InternalFrame correspondente.
Ou melhor ainda… você pode deixar uma outra classe responsável por fazer essas chamadas… você pode criar uma classe “Observadora”, que implementaria ActionListener… aí você passaria uma referencia dela como listener dos eventos dos componentes.
A idéia é essa… se tiver dúvidas de como fazer isso, dá um toque
[]'s
Luiz_Gustavo
é isso aí!!
precisando é só dar um toque.
[]'s :thumbup:
D
diogormelo
Pessoal, pra não complicar muito tentando explicar o meu problema, vou pedir um exemplo.
Um JFrame chamado Principal, com um jDesktopPane e um JMenuBar com dois jMenuItem’s.
O jMenuItem1 tem um evento que chama o JIF1 para jDesktopPane;
O jMenuItem2 tem um evento que chama o JIF2 para jDesktopPane;
Resumindo a ação:
Quando clicar no jMenuItem1, ele irá chamar o jInternalFrame1 (JIF1) para o jDesktopPane.
Quando clicar no jMenuItem2, ele irá chamar o jInternalFrame2 (JIF2) para o jDesktopPane.
Por favor galera, ajudem aí, eu andei procurando por alguns fóruns, inclusive no fórum do GUJ e vi que tem muita gente com dúvida em relação a isso.
E desde já, agradeço pela colaboração de todos…[/b]
D
diogormelo
Luiz, muito obrigado por sua ajuda.
É mais ou menos assim:
Só que como eu tenho vários jInternalFrame’s, eu queria saber se há como criar apenas um único internalframe para abrir todos os internalframe’s através do primeiro internalframe, entendeu ?
Tipo assim, criar um jInternalFrame chamado IFPrincipal e todos os meus outros internalframe’s serão abertos atrabés do IFPrincipal.
Para quem usa eclipse, fica aparecendo o InternalFrameUm e o InternalFrameDois por causa do InternalFrameXX jif2 = new InternalFrameXX();
Imagine eu fazer isso para todos os 63 internalframe’s… vai ficar aparecendo todos eles na hora que eu abrir a aplicação (utilizo o Visual Editor).
D
diogormelo
Luiz, obrigado.
Vou fazer um teste, qualquer coisa eu posto aqui…
D
diogormelo
Luiz_Gustavo:
Se eu entendi, você quer que sempre haja somente uma única JInternalFrame… tente isso:
...
Mas dessa forma os anonnymous inner class ficarão aparecendo… quando eu compilar, ele vai gerar o Principal$1.class e o Principal$2.class … um para cada ITEM.addActionListener… e como eu tenho mais de 50 arquivos classes.
Principal$1.class … Principal$49.class…