Add um container a outro, tem como ?!

2 respostas
B

Boa tarde galera, sei q sou novato aki no fórum, mas o conheço e pesquiso tem algumas semanas, só não havia me registrado pq encontrava aki as respostas para as minhas dúvidas em outros tópicos, só q agora empaquei em uma questão.
To fazendo um programinha, e quero criar uma janela com menus (os menus eu ainda vou fazer) e quero carregar outros containers de classes externas dentro da minha janela principal q tbm é uma classe q só terá a janela e os menus... fiz +/- assim...

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

public class principal extends JFrame
{
	public principal()
	{
		Container cp = getContentPane();
		code cde = new code(); // aki queria carregar o outro container de outra classe
		this.setContentPane(cde); // e aki queria adicionar a este container
		setTitle("Nome do Programa");
		setSize( 800 , 600 );
		setLocationRelativeTo(null);
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	}
	public static void main (String args[])
	{
		new principal().setVisible(true);
	}
}

a outra classe é assim, por enquanto ta abrindo outras classes em janelas separadas e fechando ela propria pelo dispose(); mas, pra evitar esse abre e fecha de janelas queria fazer isso ... adicionando todas elas a uma só nem q tivesse q brincar com vários setVisible(true) ou (false) dependendo da ação ou navegação nos containers. A outra classe é essa :

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

public class code extends JFrame
{
	private JLabel Tlogin;
	private JTextField login;
	private JLabel Tpass;
	private JTextField pass;
	private JButton ok;
		
	public code()
	{
		Container cde = getContentPane();
		setLayout(new GridLayout(3,2));
		
		Tlogin = new JLabel ("Digite seu nome de usuário:");
		login = new JTextField (10);
		login.setToolTipText("Digite seu login !");
		Tpass = new JLabel ("Digite sua senha:");
		pass = new JPasswordField (10);
		pass.setToolTipText("Digite sua senha !");
		ok = new JButton ("OK");
		ok.setToolTipText("Clique para entrar !");
		
		cde.add(Tlogin);
		cde.add(login);
		cde.add(Tpass);
		cde.add(pass);
		cde.add(ok);
		
		EventoOk handler = new EventoOk();
		ok.addActionListener(handler);
		
		setTitle("Nome do programa");
		setSize( 420 , 120 );
		setLocationRelativeTo(null);
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
			
		// formatar melhor a janela, tenho q entender melhor o gridlayout
	}
	
	private class EventoOk implements ActionListener
	{
		public void actionPerformed (ActionEvent event)
		{
			String mostrar = ""; // abrindo variáveis só pra teste
			String mostrar2 = "";
			mostrar = login.getText(); // pega o login, senha e testa com o bd
			mostrar2 = pass.getText();
			JOptionPane.showMessageDialog(code.this, String.format("Nome de usuário: "+mostrar+"\nSenha: "+mostrar2)); // só pra ver se as entradas estão certas
			new escolhe_empresa().setVisible(true);// após confimação de login e pass, abre a tela de escolha da base de dados
			dispose();
		}
	}
	public static void main (String args[])
	{
		new code().setVisible(true);
	}
}

como podem ver ... ta tudo mto no inicio ainda ... só queria ver como faço nessas duas q ai eu consigo implementar nas outras... consegui passar claramente minha dúvida ? Alguem pode me ajudar ?!

P.S: tem mais uma coisa... fazendo deste modo q eu coloquei ai emcima ... ta compilando e talz, mas quando vai rodar da uma excessão: "Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container", q eu estaria querendo adicionar uma janela a um container ... :cry:

Desde ja, mto obrigado !

2 Respostas

ale-asilva

Fala ai Br_code, não li todo seu programa cara, mas você está indo no caminho certo, sugiro que na sua classe de formulários filhos você estender o JInternalFrame.
Ai o formulário ficará preso dentro do formulário pai.

Se valer como dica estou usando o netbeans para escrever interface, me ajuda muito.

www.netbeans.org.

Abraço;
Alexandre

B

ale-asilva, vlw ai pela dica, comecei então a ver a coisa de uma forma diferente ... adicionando então tudo a um JInternalFrame.
porém.. ainda não consigo fazer a chamada do container da classe exterior pra dentro dele ... vejam como está :

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

public class principal extends JFrame
{
	public principal()
	{
		boolean resizable = true;
    	boolean closeable = true;
    	boolean maximizable  = true;
    	boolean iconifiable = true;
    	String title = "teste";
    	JInternalFrame iframe = new JInternalFrame(title, resizable, closeable, maximizable, iconifiable);
       	int width = 200;
    	int height = 100;
    	iframe.setSize(width, height);
       	iframe.setVisible(true);
    
    	// Add components to internal frame...
    	iframe.getContentPane().add(???);// como chamar o outro container aki ?
    
    	JDesktopPane desktop = new JDesktopPane();
    	desktop.add(iframe);
    	
      	JFrame frame = new JFrame();
    	frame.getContentPane().add(desktop, BorderLayout.CENTER);
    	frame.setSize(300, 600);
    	frame.setVisible(true);
    	
		/*Container cp = getContentPane();
		code cde = new code();
		this.setContentPane(cde);
		setTitle("SISCCON - Sistema de Cadastramento de Contratos");
		setSize( 800 , 600 );
		setLocationRelativeTo(null);
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );*/
	}
	public static void main (String args[])
	{
		new principal();
	}
}

Alguem pode me dar mais uma luz aí ?

Criado 25 de setembro de 2007
Ultima resposta 25 de set. de 2007
Respostas 2
Participantes 2