[Resolvido] Referencia JDesktopPane

8 respostas
E

Ola pessoal, seguinte tenho na minha classe Principal um frame juntamento com um JDesktopPane, o problema é que tenho um botão cadastrar cliente em outro JInternalFrame(Classe ListarClientes) que quando eu clico nele deveria adicionar ao JDesktopPane(Classe Principal) e dai mostrar o JInternalFrame da Classe Cadastrar Clientes. Como que faço isso, como faço pra copiar a referencia do JDesktopPane para o outro JIternalFrame e depois retornar para o Original JDesktopPane(Classe Principal).

8 Respostas

luishenriquempereira

Deixa ver se eu entendi. Vocẽ tem um Frame(Principal) que contém um JDesktopPane e este contém um JInternalFrame(ListarClientes) que possui um botão. Quando você clica neste botão um novo JInternalFrame é adicionado ao JDesktopPane do Frame(Principal) é isso.

E

Isso mesmo, so gostaria de saber como faço pra adicionar ao JDesktopPane o JInternalFrame Cadastro de Cliente, que deveria aparecer quando clico no botão do JInternalFrame ListarClientes !!!

luishenriquempereira

Crie um construtor para ListarClientes que receba como parâmetro o JDesktopPane do Frame Principal.
Eu fiz assim espero ter ajudado.

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

import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;


public class Janela extends JFrame{
	
	private JDesktopPane desktop;
	
	public Janela(){
		super("JDesktopPane");
		desktop = new JDesktopPane();
		desktop.add(new ListarCliente(desktop));
		
		add(desktop);
		setSize(500, 400);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}// fim do construtor
	
	
	public class CadastrarCliente extends JInternalFrame{
		JButton button;
		
		public CadastrarCliente(){
			super(null, true, true, true, true);
			setBounds(1, 20, 200, 200);
			setTitle("Cadastrar Clientes");
			setDefaultCloseOperation(HIDE_ON_CLOSE);
			setVisible(true);
		}// fim do construtor
	}// fim da classe CadastrarCliente

	
	public class ListarCliente extends JInternalFrame{
		JButton button;
		
		public ListarCliente(final JDesktopPane desktop){
			super(null, true, true, true, true);
			setLayout(null);
			button = new JButton("Cadastrar Clientes");
			button.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e) {
					desktop.add(new CadastrarCliente());
				}				
			});
			button.setBounds(1, 1, 180, 20);
			add(button);
			setBounds(1, 1, 200, 200);
			setTitle("Cadastrar Clientes");
			setDefaultCloseOperation(HIDE_ON_CLOSE);
			setVisible(true);
		}// fim do construtor
	}// fim da classe ListarCliente

	public static void main(String args[]){
		new Janela();
	}
}// fim da classe Janela
E

Só que é assim, são três Classes Diferentes, tem uma classe Principal, uma ListarClientes, e uma outra Classes Cadastrar clientes, o que eu quero fazer é poder acessar a referencia que se encontra na classe Principal, adicionando o InternalFrame CadastrarClientes no JDesktopPane da classe Principal e depois mostrar JInternalFrame Cadastrar Clientes, só que no seu exemplos todos estão na mesma classe e aqui no que eu quero fazer são três classes Diferentes entende, pois o JDesktop esta presente só na Classe Principal

luishenriquempereira

Só que é assim, são três Classes Diferentes, tem uma classe Principal, uma ListarClientes, e uma outra Classes Cadastrar clientes, o que eu quero fazer é poder acessar a referencia que se encontra na classe Principal, adicionando o InternalFrame CadastrarClientes no JDesktopPane da classe Principal e depois mostrar JInternalFrame Cadastrar Clientes, só que no seu exemplos todos estão na mesma classe e aqui no que eu quero fazer são três classes Diferentes entende, pois o JDesktop esta presente só na Classe Principal
Mas isso é muito simples. Eu coloquei tudo em uma classe para simplificar. ListarCliente e CadastrarCliente são classes internas de Janela no exemplo. O que eu quis dizer essencialmente foi que, quando o objeto ListarCliente é criado ele deve receber como paràmetro em seu construtor o JDesktopPane no qual ele esta inserido para que assim ele possa adicionar outros JInternalFrame no mesmo, entendeu.

E

Desculpa minha ignorância, é que sou inciado em java e estava tentando fazer de forma a referenciar o Objeto mas não esta funcionando veja o código

// Dentro da Classe Principal

public JDesktop getJDesktopPane(){
 return jdesktopPane1;
}


public setJDesktopPane(JDesktopPane desk){

      jdesktopPane1 = desk;
}

E na classe ListarClientes, dentro do evento do botão adicionar Clientes fiz assim;

JDesktopPane desk;
   desk=principal.getDesktopPane();
   CadastraCliente cad = new CadastrarCliente();
   desk.add(cad);
   principal.setJDesktopPane(desk);
   cad.setvisible(true);
Mesmo assim não esta adiciona  no JDesktopPane da classe Principal o JInternalFrame CadastrarClientes e nem mostrando o mesmo depois, o que estou fazendo de errado !!! Se puder me ajudar ficaria agradecido
luishenriquempereira

Da forma que voê esta tentando fazer dá erro porque para utilizar metodos de outras classes é necessario que eles sejam estáticos.
Se não forem estáticos você deve criar um novo objeto aprtir dessa classe
exemplo:

// método da classe principal
public JDesktopPane getDesktop(){
	return desktop;
}

// classe ListarClientes
public class ListarClientes extends JInternalFrame{
	public ListarCliente(){
		JDesktopPane desk = Principal.getDesktop(); // Ocorre erro pois não foi criado um objeto apartir da classe principal
	}// fim do construtor
}// fim da classe ListarCliente

Como você é iniciante em java talvez não esteja familiarizado com os conceitos de orientação a objetos.
Pense enatão dessa forma:
Você tem um frame principal com varios atributos, um deles é o JDesktopPane;

public class Principal{
	private JDesktopPane desk; // atributo da classe Principal
	
	
}// fim da classe Principal

A classe ListarCliente que, suponho eu no seu problema extende JInternalFrame, possui um botão

public class ListarClientes extends JInternalFrame{
	public ListarCliente(){
		JButton button = new JButton("Cadastar Clientes");
	}// fim do construtor
}// fim da classe ListarCliente

Para que ListarClientes possa adicionar novos JInternalFrames no JDesktopPane do frame Principal é necessário que ela receba a referência do objeto JDesktopPane. E isso pode ser feito como eu sugeri no início.

public class ListarClientes extends JInternalFrame{
        // construtor que recebe um objeto JDesktopPane como parâmetro
	public ListarCliente(final JDesktopPane desktop){
		JButton button = new JButton("Cadastar Clientes");
	}// fim do construtor
}// fim da classe ListarCliente

// FRAME Principal
listar = new ListarClientes(desk);
desk.add(listar); //  JInternalFrame adicionado ao JDesktopPane

Ao clicar o botão é executada a seguinte ação:

// Ação executada pelo botão de ListarClientes
CadastrarClientes cad = new CadastrarClientes(); // um novo objeto CadastrarCliente é criado
desk.add(cad); // Objeto da variável cad é adicionado ao JDesktopPane

Não tem mistério.

E
Consegui fazer agora, muito obrigado Luis
Criado 25 de dezembro de 2011
Ultima resposta 26 de dez. de 2011
Respostas 8
Participantes 2