Eae galera, blz?
Seguinte…, estou desenvolvendo um aplicativo teste MDI. Este aplicativo tem a seguinte estrutura com 3 classes:
FrmPrincipal (JFrame)
IfrmA (JInternalFrame)
IfrmB (JInternalFrame)
FrmPrincipal tem um JMenu com 2 JMenuItem. Um fazendo a chamada ao IfrmA, e o outro chamando IfrmB; utilizando o seguinte código (no FrmPrincipal) para isso:
// JMenuItemA
IfrmA ifrmA = new IfrmA();
ifrmA.setSize(320, 240);
ifrmA.setVisible(true);
desktopPane.add(ifrmA);
// JMenuItemB
IfrmB ifrmB = new IfrmB();
ifrmB.setSize(320, 240);
ifrmB.setVisible(true);
desktopPane.add(ifrmB);
Até aqui tudo bem e sem problemas com o NetBeans…
O IfrmA tem um botão. Eu preciso fazer uma chamada ao IfrmB deste botão do IfrmA e abrir o IfrmB dentro do FrmPrincipal. Confuso neh? heheh. Segue a imagem para explicar melhor.
![](//www.guj.com.br/uploads/default/original/3X/d/2/d256cc6b292b89b6b59b3a2fa6e4886fac6bcd9f.jpg)
Cara, fiz umas classes aqui para demonstrar, tentei ser o mais simples possivel para que vc entenda facil.
Ai vao elas :
principal.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class principal extends JFrame
{
private JDesktopPane desktop;
private JMenuBar menu;
private JMenu cadastros;
private JMenuItem clientes;
public principal()
{
super("Tela Principal");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);
desktop = new JDesktopPane();
getContentPane().add(desktop);
menu = new JMenuBar();
setJMenuBar(menu);
cadastros = new JMenu("Cadastros");
clientes = new JMenuItem("Clientes");
clientes.addActionListener (
new ActionListener() {
public void actionPerformed(ActionEvent e) {
jIFrClientes clients = new jIFrClientes(desktop);
desktop.add(clients);
clients.setVisible(true);
clients.setLocation(90, 215);//localizacao na tela
try
{
clients.setSelected(true);//deixa o frame selecionado
}
catch (Exception ex){}
}
}
);
menu.add(cadastros);
cadastros.add(clientes);
setVisible(true);
}
public static void main(String[] args)
{
new principal();
}
}
jIFrClientes.java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JInternalFrame;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
public class jIFrClientes extends JInternalFrame implements ActionListener
{
private JDesktopPane desktop;
private JButton bconsulta;
public jIFrClientes(JDesktopPane jdesktop)
{
super("Cadastros de Clientes", false, true, false, true);
desktop = jdesktop;
bconsulta = new JButton("CONSULTAR");
bconsulta.addActionListener(this);
add(bconsulta, BorderLayout.SOUTH);
setSize(400,400);
setVisible(true);
}
public void actionPerformed(ActionEvent actionEvent)
{
String arg = actionEvent.getActionCommand();
if (arg.equals("CONSULTAR"))
{
consultaClientes clientsConsulta = new consultaClientes();
desktop.add(clientsConsulta);
clientsConsulta.setVisible(true);
try
{
clientsConsulta.setSelected(true);
}
catch (Exception e1)
{
e1.printStackTrace();
}
}
}
}
consultaClientes.java
import javax.swing.JInternalFrame;
public class consultaClientes extends JInternalFrame
{
public consultaClientes()
{
super("Consulta Clientes", false, true, false, true);
setSize(200,200);
setVisible(true);
}
}
Espero que ajude, qualquer duvida em relacao ao codigo, pode perguntar.
Falowsss
:oops: cara, to até envergonhado da simplicidade que eh fazer isso ae hehehe. Muito obrigado mesmo! Valeu mesmo!
Trabalhei durante 2 anos com .NET (C# e ASP.NET), mas fiquei muito descontente com essa tecnologia. Microsoft não tem respeito algum pelo desenvolvedor. Por isso, desde o final do ano passado, comecei a estudar e utilizar Java.
Mais uma vez muito obrigado. Longa vida ao Java e ao GUJ.
PS.: em anexo a versão em netbeans caso alguém precise.