Ola galera gostaria de uma ajuda de vcs, Como faço para utilizar o MDI na minha aplicação onde tenho um frame podedo chamar de pai e ter varios filhas , nela msm chama
as outras frame, por que na minha aplicação aparece 2 janelas ou ate mais .
me ajudem !
uaslei Java
Se eu não me engano você consegue fazer com a classe JInternalFrame.
Vou dar um procurada aqui nos meus codigos , se eu encontrar alguma coisa te mando um exemplo.
Que tal postar as dúvidas de interface gráfica, no fórum de interface gráfica?
Leia com atenção a descrição dos fóruns antes de postar. Não dói nada e sua dúvida será respondida mais rapidamente.
Quanto ao seu problema… siga o conselho do Rafael e procure por JInternalFrame e JDesktopPane:
http://download.oracle.com/javase/tutorial/uiswing/components/internalframe.html
Ou largue mão desse MDI de uma vez, como fez o Windows há uns 5 anos.
Não achei um exemplo nos meus codigos , mas fiz um agora “saindo do forno” , segue abaixo:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JInternalFrame;
import javax.swing.JButton;
import java.awt.Dimension;
public class TesteFrameInterno {
public TesteFrameInterno() {
JFrame gui = new JFrame("Janela Principal"); // Janela principal
JPanel panel = new JPanel(); // Painel da janela principal
JPanel ipanel = new JPanel(); // Painel da janela interna
JButton botao = new JButton("OK"); // Botao que sera colocada na janela interna
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Define o tamanho do botao
botao.setPreferredSize(new Dimension(100,50));
// Adiciona botao no JPanel interno
ipanel.add(botao);
// ***** AQUI VOCE CRIA O FRAME INTERNO *****
JInternalFrame igui = new JInternalFrame("Janela Interna");
// Define o tamanho e posicao da janela principal
gui.setBounds(0,0,800,600);
// Define tamanho do frame interno
igui.setPreferredSize(new Dimension(300,200));
// O frame interno pode ser maximizado
igui.setMaximizable(true);
// O frame interno pode ser redimensionado
// obs: O frame interno volta ao tamanho original quando solta o click do mouse ,
// TALVEZ tenha que tratar evento do frame interno.
igui.setResizable(true);
// Frame interno pode ser fechado no X
igui.setClosable(true);
// Adicional JPanel no frame interno
igui.add(ipanel);
// Adiciona frame interno no JPanel do Frame principal
panel.add(igui);
// Adiciona JPanel no Frame principal
gui.add(panel);
// Exibe o frame interno
igui.setVisible(true);
// Exibe o frame principal
gui.setVisible(true);
}
public static void main(String args[] ) {
TesteFrameInterno testeframe = new TesteFrameInterno();
}
}
Espero que isso te ajude.
Bom dia a todos.
Rafael, permita-me fazer uma correção no seu código.
JInternalFrames funcionam melhor dentro de um Panel principal chamado JDesktopPane, onde este contém mais recursos (métodos) que controlam o array de JInternalFrames, dentre eles está o metodo "setSelectedFrame(nome_da_instancia_do_JInternalFrame);
Então seu código ficaria assim:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JInternalFrame;
import javax.swing.JButton;
import java.awt.Dimension;
public class TesteFrameInterno {
public TesteFrameInterno() {
JFrame gui = new JFrame("Janela Principal"); // Janela principal
JDesktopPane panel = new JDesktopPane(); // Painel da janela principal
JPanel ipanel = new JPanel(); // Painel da janela interna
JButton botao = new JButton("OK"); // Botao que sera colocada na janela interna
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Define o tamanho do botao
botao.setPreferredSize(new Dimension(100,50));
// Adiciona botao no JPanel interno
ipanel.add(botao);
// ***** AQUI VOCE CRIA O FRAME INTERNO *****
JInternalFrame igui = new JInternalFrame("Janela Interna");
// Define o tamanho e posicao da janela principal
gui.setBounds(0,0,800,600);
// Define tamanho do frame interno
igui.setPreferredSize(new Dimension(300,200));
// O frame interno pode ser maximizado
igui.setMaximizable(true);
// O frame interno pode ser redimensionado
// obs: O frame interno volta ao tamanho original quando solta o click do mouse ,
// TALVEZ tenha que tratar evento do frame interno.
igui.setResizable(true);
// Frame interno pode ser fechado no X
igui.setClosable(true);
// Adicional JPanel no frame interno
igui.add(ipanel);
// Adiciona frame interno no JDesktopPane do Frame principal
panel.add(igui);
// Adiciona JPanel no Frame principal
gui.add(panel);
// Exibe o frame interno
igui.setVisible(true);
// Exibe o frame principal
gui.setVisible(true);
}
public static void main(String args[] ) {
TesteFrameInterno testeframe = new TesteFrameInterno();
}
}
Um abraço
discorpio ,
Obrigado pela correção , aprendi mais essa. 