Duvida jframe e finternalframe

4 respostas
K

Estou com uma duvida, no código abaixo tenho um jframe nele o menu , abaixo um jdesktoppane e nele um jinternalframe.Os menus abrem os 2 jinternal fremes, no menu tem um if que verifica se a janela ja esta aberta, caso esteja ele não abre uma cópia dela.

- 1° problema é que quando eu abro um jinternalframe e fecho, se tento abrir o mesmo de novo não consigo.(Resolvi fazendo um botão sair apenas alterando o setVisible() mas acho que isso não é a melhor maneira.

  -2° como vcs podem ver eu abro o jinternalframe dentro do desktop porem eu crio ele no próprio arquivo e na hora de criar com o WindowBuilder e com o tando de jinternalframe que preciso foca inviável fazer assim.
       Logo como eu faria pra fazer o jinternal frame numa classe separada(arquivo separado) e apenas chamar ele neste arquivo.

Segue código:

package hh;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;


public class TesteInternalFrame extends JFrame {
        
        JMenuItem mntmSair;
        JMenuItem mntmInternal1;
        JMenuItem mntmInternal2;
        
        JDesktopPane desktopPane;
        JInternalFrame internalFrame1;
        JInternalFrame internalFrame2;
        
        public static void main(String[] args) {
                new TesteInternalFrame();
        }
        
        public TesteInternalFrame() {           
                //adicionando os Menus
                JMenuBar menuBar = new JMenuBar();
                setJMenuBar(menuBar);
                
                JMenu mnArquivo = new JMenu("Arquivo");
                menuBar.add(mnArquivo);
                
                mntmSair = new JMenuItem("Sair");
                mntmSair.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                System.exit(0);
                        }
                });
                mnArquivo.add(mntmSair);
                
                JMenu mnInternalframes = new JMenu("InternalFrames");
                menuBar.add(mnInternalframes);
                
                mntmInternal1 = new JMenuItem("Internal1");
                mnInternalframes.add(mntmInternal1);
                mntmInternal1.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                if(!internalFrame1.isVisible()){
                                        internalFrame1.setVisible(true);
                                }
                        }
                });
                
                mntmInternal2 = new JMenuItem("Internal2");
                mntmInternal2.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                if(!internalFrame2.isVisible()){
                                        internalFrame2.setVisible(true);
                                }
                        }
                });
                mnInternalframes.add(mntmInternal2);
                
                //adicionando o desktopPane
                desktopPane = new JDesktopPane();
                getContentPane().add(desktopPane, BorderLayout.CENTER);         
                
                internalFrame1 = new JInternalFrame("Internal 1", true, true);
                internalFrame1.setBounds(72, 42, 150, 100);
                desktopPane.add(internalFrame1);
                internalFrame2 = new JInternalFrame("Internal 2", true, true);
                internalFrame2.setBounds(5, 5, 150, 100);
                desktopPane.add(internalFrame2);
                
                setVisible(true);
                setSize(300,200);
        }
}

4 Respostas

R

Nas linhas 72 a 77, acrescente o setDefaultCloseOperation(HIDE_ON_CLOSE) para cada internal frame, ficando mais ou menos assim :

internalFrame1 = new JInternalFrame(“Internal 1”, true, true);

internalFrame1.setBounds(72, 42, 150, 100);

internalFrame1.setDefaultCloseOperation(HIDE_ON_CLOSE);  // CODIGO ACRESCENTADO

desktopPane.add(internalFrame1);

internalFrame2 = new JInternalFrame(“Internal 2”, true, true);

internalFrame2.setBounds(5, 5, 150, 100);

internalFrame2.setDefaultCloseOperation(HIDE_ON_CLOSE);  // CODIGO ACRESCENTADO

desktopPane.add(internalFrame2);
K

show, quanto a outra duvida, desta maneira eu crio e mostro o jinternalframe no mesmo arquivo, como eu faria pra chamar ele de outro arquivo?

lalau
public class InterFrame extends JInternalFrame {
	
	//tudo que deve aparecer no InterFrame vem aqui	JLabel, JButton etc...
}

depois na sua classe que estende a JFrame declare nela “JDesktopPane” para receber a “JInternalFrame”.

public class Janela extends JFrame {
	public Janela(){	
	botao.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent evento){
			JDesktopPane.add(new InterFrame());// adicione aqui o JInternalFrame
		}
	});
        }
}

espero ter ajudado. :wink:

K

Obrigado pessoal, deu tudo certo aqui.

Criado 9 de outubro de 2012
Ultima resposta 12 de out. de 2012
Respostas 4
Participantes 3