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).
[Resolvido] Referencia JDesktopPane
8 Respostas
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.
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 !!!
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
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
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 PrincipalMas 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.
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
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.
Consegui fazer agora, muito obrigado Luis