Duvidas em JDesktopPane e JInternalFrame [RESOLVIDO]

11 respostas
E

Ola pessoal tudo bem ja postei um post desse mas nao tive resposta mas tambem nao estava com o codigo para mostra
a minha duvida e simple mas nao sei oque esta acontecendo de errado e assim!

quero ter uam tela principal do programa onde por um menu se chama um JDesktop e criei outra classe onde sera a tela do item de menu tipo em menu tem cadastro ai nele abre uma tela de cadastro dentro do frame da tela principal .

A tela de cadastro tem um JInternalFrame com um JPane dentro so que quando clico para aparecer no menu nao aparece a tela!!!

vo posta o codigo do evento o JDesktop deixei como variavel de instancia vo posta a baixo!!

// essa classe herda de  JFrame
	
               public class item1Listener implements ActionListener{
	  public void actionPerformed(ActionEvent ex){		  		  

		  dt = new JDesktopPane(); // isso esta como variavel de instancia
		  
                                  Cadastro ca = new Cadastro();  //essa e a instancia da tela de Cadastro
	
		  dt.add(ca);
		  
		  ca.setVisible(true);
		  frame.add(dt);                     //aqui o o JDesktop foi add ao frame 

	   
		  dt.setVisible(true);
		  
		  dt.setSize(500,500);
		  
		  frame.repaint(); // o frame esta ja tudo certo com setVisible e setSize esta no construtor da classe
	  }
	}

essa a outra classe de cadastro vo posta ela toda!!

package Tela;

import java.awt.*;
import javax.swing.*;


public class Cadastro extends JPanel{
	
	private JPanel pane;
	private JButton b1; 
	private JInternalFrame in;

	
	public Cadastro (){
		

		pane = new  JPanel();
		b1 = new JButton("Botao de teste");
		in = new JInternalFrame("Frame interno",true,true,true,true);
		in.add(pane,BorderLayout.CENTER);
		pane.add(b1);
		
        
		in.setSize(500,500);
		pane.setSize(800,600);
		in.setVisible(true);
		
	

	
	
	}
	

	
}

alguem pode me ajuda no que esto fazendo de errado!!

11 Respostas

ONHATE

Cada vez vc cria um novo JDesktopPane?
Isso ocultaria o antigo dependendo do seu gerenciado de layout usado no JFrame.
E outra também dependendo do frame para o desktop aparecer ou não.

E

entao amigo fiz o que vc falo deixei so um JDesktopPane mas ainda nao aparece da o mesmo erro vo posta o começo da classe ate a parte do evento

package Tela;

import javax.swing.*;

import java.awt.event.*;
import java.awt.*;

public class Principal  extends JFrame{
	
	private JFrame frame;
    private JDesktopPane dt = new JDesktopPane();
    

	
	public Principal (){
		  
		 super();
		 
		 frame = new JFrame ("Abrindo duas classes no eclipses que e bem melhor");
		   
		  JMenuBar bar = new JMenuBar();
		  JMenu menu = new JMenu("cadastro");
		  JMenuItem item1 = new JMenuItem("Cadastro de cliente");
		  JMenuItem item2 = new JMenuItem("sair do prgrama");
		  
		  bar.add(menu);
		  menu.add(item1);
		  menu.add(item2);
		  
		  item1.addActionListener(new item1Listener());
		  item2.addActionListener(new item2Listener());
		  
		  frame.setJMenuBar(bar);
		  frame.setSize(800,600);
		  frame.setVisible(true);
		  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
lina

Oi,

Você deverá setar um layout para seu JDesktopPanel() e um tamanho!

Crie ele assim.:

// Cria o Desktop Pane
dt = new JDesktopPane();
dt.setLayout(null);
dt.setBounds(0,0,1000,625);

Depois adicione ele em seu frame.:

frame.add(dt);

Na ação do seu Menu, (ou em qualquer ação para abrir a outra tela) deverá ficar.:

Action
io_ie_cadastro = new AbstractAction("Cadastro") {	
	public void actionPerformed(ActionEvent e){

		Cadastro ca = new Cadastro();
		dt.add(ca);   
		ca.setVisible(true);   
	}
};

Pronto =)

Tchauzin!

E

Lina muito obrigado pela dica mas nao entendi so essa parte !

Action   
io_ie_cadastro = new AbstractAction("Cadastro") {     
    public void actionPerformed(ActionEvent e){   
  
        Cadastro ca = new Cadastro();   
        dt.add(ca);     
        ca.setVisible(true);     
    }   
};

de onde devo colocala?

lina

Oi,

Então, você deverá adiciona-lo a ação do seu menuitem.

Por exemplo.:

item1.setAction(io_ie_cadastro);

Quando você clicar no menu1 irá abrir a sua tela.

Tchauzin!

E

Nossa achei bem interesante o modo que voçe mando eu fazer Lina esto estudando java e a primeira vez que vejo um evento desse jeito mas gostei de aprender outro modo tambem

:smiley:
:smiley:

mas so que ainda nao esta aparecendo o Panel a tela fica branca coloquei do jeito que voçe falo vo posta aqui para nao confudir

public class Principal  extends JFrame{
	
	private JFrame frame;
    private JDesktopPane dt;
    

	
	public Principal (){
		  
		 super();
		 
		 frame = new JFrame ("isso vai dar certo");
		   
		  JMenuBar bar = new JMenuBar();
		  JMenu menu = new JMenu("cadastro");
		  JMenuItem item1 = new JMenuItem("Cadastro de cliente");
		  JMenuItem item2 = new JMenuItem("sair do prgrama");
		  
		  bar.add(menu);
		  menu.add(item1);
		  menu.add(item2);
		  
		  item1.setAction(io_ie_cadastro);  
		  item2.addActionListener(new item2Listener());
		  
		  dt = new JDesktopPane();
		  dt.setLayout(new BorderLayout());   
		  dt.setBounds(0,0,1000,625);
		  
		  frame.add(dt); 
		  frame.setJMenuBar(bar);
		  frame.setSize(1200,625);
		  frame.setVisible(true);
		  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		  
 
	}
	
	Action     
	io_ie_cadastro = new AbstractAction("Cadastro") {       
	    public void actionPerformed(ActionEvent e){     
	     
	        Cadastro ca = new Cadastro();     
	        dt.add(ca);       
	        ca.setVisible(true);       
	    }     
	};

ta do mesmo modo que voçe me falo mas a tela fica branca nao aparece a outra tela

a outra class ta assim

package Tela;

import java.awt.*;
import javax.swing.*;


public class Cadastro extends JPanel{
	
	private JPanel pane;
	private JButton b1; 
	private JInternalFrame in;

	
	public Cadastro (){
		

		pane = new  JPanel();
		b1 = new JButton("Botao de teste");
		in = new JInternalFrame("Frame interno",true,true,true,true);
		in.add(pane,BorderLayout.CENTER);
		pane.add(b1);
		
		

		in.setSize(500,500);
		pane.setSize(800,600);
		in.setVisible(true);
		
	

	
	
	}
	

	
}

OBRIGADO PELA AJUDA ATE AQUI LINA :smiley: :smiley:

E

alguemmm me ajuda aqui por favor!!

E

pessoal sei que esto sendo chato nesse topico mas voçes pode me ajudar aqui nao sei oq esto fazendo de errado nao aparece a tela
alguem me ajuda so isso!!!

oobrigado!! :smiley: :smiley:

S

Opa Cara beleza?

Vou tentar te ajudar, mas vamos com calma, já usei JDesktopPane e sei que é um sofrimento só usar esse negocio =) …

Vamos lá, vi uma coisa, num sei se posso dizer que está errada, mas, acho que pode ser o problema,

Quando você adiciona um JDesktopPane a um JFrame, você está dizendo que o ContentPane do JFrame deve se comportar como um JDersktopPane, ou pelo menos é isso o que na maioria das vezes queremos fazer, entendeu?

Acho que é isso, não sou um dos maiores entendidos em Java, e nem quero ser =).

No seu exemplo você apenas faz

frame.add(instância de JdesktopPane)

o certo seria,

frame.setContentPane(instância de JdesktopPane);

igual está no exemplo da Sun em http://java.sun.com/docs/books/tutorial/uiswing/examples/components/InternalFrameDemoProject/src/components/InternalFrameDemo.java

Qualquer coisa estamos ai.

lina

Oi,

Estava esperando acabar esse feriado para voltar
ao trabalho e lhe ajudar nessa questão...

Fiz um pequeno teste, com alguns comentarios que irão lhe ajudar nessa dúvida!

//
// Classe principal (Contem os menu's e chama o JInternalFrame de outra classe)
//
public class Teste
{
	// Declara as variáveis necessárias
	public JFrame io_frame;
	
	private JDesktopPane io_desktop;

	private JMenuBar barra_menu;
	
	private JMenu mn_cadastros;
	
	private JMenuItem mi_cadastros_estados;
	
	// Variavel da tela de estados.
	public Estados io_estados;
	
	/**
	 * Construtor da Classe
	 */
	public Teste()
	{
		// Chama o metodo responsavel por criar a janela
		WindowGUI();

		// Modifica o valor YES/NO da JOptionPane para SIM/NAO.
		UIManager.put("OptionPane.yesButtonText","Sim");
		UIManager.put("OptionPane.noButtonText","Não");
	}

	/**
	 * Metodo responsavel por criar a janela
	 */
	public void WindowGUI()
	{
		// Cria o Desktop Pane
		io_desktop = new JDesktopPane();
		io_desktop.setLayout(null);
		io_desktop.setBounds(0,0,1000,625);
		
		// Cria Barra de Menu
		barra_menu = new JMenuBar();
		
		mn_cadastros = new JMenu("Cadastros");
		mi_cadastros_estados = new JMenuItem(io_ie_estados);
		mi_cadastros_estados.setIcon(R2MIcon.aplicacao_16x16);
		mn_cadastros.add(mi_cadastros_estados);
		barra_menu.add(mn_cadastros);
		
		// Cria a janela.		
		io_frame = new JFrame("TESTE");
		//io_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// Seta a barra e o content pane anexando ao JFrame.
		io_frame.setJMenuBar(barra_menu);
		
		// Cria o tamanho da tela.
		io_frame.setSize(1000,680);
		io_frame.setLayout(null);
		io_frame.setResizable(false);
		
		// Centraliza a tela.
		io_frame.setLocationRelativeTo(null);
		io_frame.add(io_desktop); // Adicionando o desktop no frame principal.
		
		
		// Mostra a janela.
		io_frame.setVisible(true);	
	}
	
	/**
	 * Ação quando clicado em Estados.
	 */
	Action
	io_ie_estados = new AbstractAction("Estados")
	{
		public void actionPerformed(ActionEvent e)
		{
			io_estados = new Estados();
			io_desktop.add(io_estados);
			io_estados.setVisible(true);
		}
	};	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		new Teste();	
	}
}

Pronto, no exemplo acima criamos um JDesktopPane para armazenar nossos JInternalFrame;

Segue a classe que contem o JInternalFrame.:

public class Estados extends JInternalFrame {
	
	private JLabel
	io_lb_sigla,
	io_lb_estado;
	
	private JTextField
	io_tf_sigla,
	io_tf_estado;
	
	private JButton
	io_bt_novo,
	io_bt_salvar,
	io_bt_buscar,
	io_bt_fechar;
	
	public Estados(){
		setSize(400,190);
		setTitle("Cadastro de Estados");
		setLayout(null);
		setClosable(true);
		setIconifiable(true);
		WindowGUI();
	}
	
	public void WindowGUI(){
		
		getContentPane().setLayout(null);
		
		// Cria os Labels
		io_lb_sigla = new JLabel("Sigla:");
		io_lb_sigla.setBounds(10,20,50,30);
		getContentPane().add(io_lb_sigla);
		
		io_lb_estado = new JLabel("Estado:");
		io_lb_estado.setBounds(10,60,50,30);
		getContentPane().add(io_lb_estado);
		
		//Cria os TextFields
		io_tf_sigla = new JTextField();
		io_tf_sigla.setBounds(70,23,30,25);
		getContentPane().add(io_tf_sigla);
		
		io_tf_estado = new JTextField();
		io_tf_estado.setBounds(70,63,150,25);
		getContentPane().add(io_tf_estado);
		
		// Cria os Botoes
		io_bt_novo = new JButton("Novo");
		io_bt_novo.setBounds(2,125,95,25);
		getContentPane().add(io_bt_novo);
		
		io_bt_buscar = new JButton("Buscar");
		io_bt_buscar.setBounds(99,125,95,25);
		getContentPane().add(io_bt_buscar);
		
		io_bt_salvar = new JButton("Salvar");
		io_bt_salvar.setBounds(196,125,95,25);
		getContentPane().add(io_bt_salvar);
		
		io_bt_fechar = new JButton("Fechar");
		io_bt_fechar.setBounds(293,125,95,25);
		getContentPane().add(io_bt_fechar);
	}

}

Espero que isso ajude! Qualquer dúvida, pergunte novamente!

Tchauzin!

E

Lina Obrigado mesmo ja estava ate sem esperança ate porque nao sabia no o que eu tava errado obrigado mesmo!!!

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

Criado 4 de setembro de 2009
Ultima resposta 9 de set. de 2009
Respostas 11
Participantes 4