Amigo, é o seguinte: eu também já tentei instanciar um JInternalFrame estendendo de um JFrame, mas ele não instancia, não cria. Eu fiz da seguinte forma, criei minhas interfaces estendendo JPanel, e depois, no Frame principal que irá conter o JDesktopPane, instanciei um JInternalFrame e adicionei a classe que estende o JPanel, e mandei mostrar o JInternalFrame, funcionou.
Em código fica desse jeito:
Classe que estende JPanel:
public class PainelTeste extends JPanel
{ }
Classe Main, ou que chamará o JInternalFrame:
public class Main
{
JDesktopPane dp = new JDesktopPane();
JInternalFrame jif = new JInternalFrame();
PainelTeste pt = new PainelTeste();
public static void main(String args[])
{
jif.add(pt);
dp.add(jif);
jif.setVisible(true);
jif.pack();
}
}
Bom, é isto, se tu não conseguires me manda um e-mail que te mando um projeto que estou desenvolvedo, ok?!
Espero ter ajudado!!!
Olha ai um exemplo de JFrame com JDesktopPane, se vc tentar executar nao vai rodar pq nao estão todas as classes ai… mas já serve pra vc ver como q declara e adiciona… :!:
cadastrosMenu = new javax.swing.JMenu();
funcionariosMenuItem = new javax.swing.JMenuItem();
...
cadastrosMenu.setMnemonic('C');
cadastrosMenu.setText("Cadastros");
funcionariosMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/_24x24/cadastro_funcionario.png")));
funcionariosMenuItem.setText("Funcion\u00e1rios");
funcionariosMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
funcionariosMenuItemActionPerformed(evt);//ESSA É A AÇÃO
}
});
cadastrosMenu.add(funcionariosMenuItem);
Essa parte declara o MenuItem e adiciona uma ação a ele;
private void funcionariosMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
funcionariosFrame.getFuncionarioPanel().limparcampos(); // POR DEFAULT MINHA JANELA NÃO ESTÁ VISÍVEL E QUANDO EU FECHO USO O METODO HIDE_ON_CLOSE
funcionariosFrame.setVisible(true); //AQUI VOCÊ FALA QUE SEU JInternalFrame DEVE APARECER NA TELA
Note que meus JInternalFrames são classes que extendem de JInternalFrame então foi por isso que você não viu no código. Mas considere funcionariosFrame como um objeto da classe JInternalFrame e não da classe FuncionariosFrame.
Cara, eu já vi isso…
se eu estivesse nesse passo… porem eu não estou,
Não estou conseguindo criar uma janela comum usando o JInternalFrame.
Classe a ser chamada no menu:
[code]
public class Teste extends JInternalFrame {
// Tenho que criar um JDesktopPane.. como faço?
}[/code]
faço com JFrame assim:
[code]
public class Teste extends JFrame {
public Container container; // Cria a variavel...
public Teste() {
// Tamanho
// Titulo
// chama o método que constrói a janela
}
public void MetodoQueCriaAJanela() {
container = getContentPane();
getContentPane().setLayout(null);
}
public static void main (String args[]) {
new Teste(); // não seria necessario o main, pois eu chamo no Item do menu.
}
}[/code]
JFrame fica assim e abre no menuItem, já a JInternalFrame fazendo a mesma coisa que o JFrame não abre no menuItem, nem aparece… porque falta o tal do JDesktopPane… já tentei usalo, pensei que estava de maneira correta mais nao deu…
Minha classe menu esta normal, fiz uma pra teste aqui:
[code]
public class MenuPrincipal {
// variaveis do menu.
// cria o frame.
public MenuPrincipal() {
// chama o método que cria a janela.
}
public JMenuBar Window() {
menu_bar = new JMenuBar();
menu = new JMenu("Sistema");
menu_bar.add(io_menu);
menu_item = new JMenuItem(io_ie_teste);
menu.add(io_menu_item);
frame = new JFrame("Teste");
frame.setJMenuBar(io_menu_bar);
frame.setBounds(300,300,500,400);
frame.setVisible(true);
return io_menu_bar;
}
}[/code]
Bom está ai o que estou tentando fazer…
Obrigado cara por estar me ajudando!!!
/*
* JInternalFrame.java
*
* Created on 17 de Abril de 2007, 10:22
*/
package janelas;
/**
*
* @author Marcos Oliveira Junqueira
*/
public class JInternalFrame extends javax.swing.JInternalFrame {
/** Creates new form JInternalFrame */
public JInternalFrame() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Código Gerado ">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
setClosable(true);
setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
setIconifiable(true);
setMaximizable(true);
setResizable(true);
setTitle("JInternalFrame");
jLabel1.setText("jLabel1");
getContentPane().add(jLabel1, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>
// Declaração de variáveis - não modifique
private javax.swing.JLabel jLabel1;
// Fim da declaração de variáveis
}
E esse JFrame
/*
* JFrame.java
*
* Created on 17 de Abril de 2007, 10:21
*/
package janelas;
/**
*
* @author Marcos Oliveira Junqueira
*/
public class JFrame extends javax.swing.JFrame {
/** Creates new form JFrame */
public JFrame() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Código Gerado ">
private void initComponents() {
jDesktopPane1 = new javax.swing.JDesktopPane();
jInternalFrame1 = new janelas.JInternalFrame();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jDesktopPane1.setBackground(java.awt.SystemColor.desktop);
jInternalFrame1.setBounds(0, 0, 210, 110);
jDesktopPane1.add(jInternalFrame1, javax.swing.JLayeredPane.DEFAULT_LAYER);
getContentPane().add(jDesktopPane1, java.awt.BorderLayout.CENTER);
jMenu1.setText("Menu");
jMenuItem1.setText("Item");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-408)/2, (screenSize.height-334)/2, 408, 334);
}// </editor-fold>
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
jInternalFrame1.setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JFrame().setVisible(true);
}
});
}
// Declaração de variáveis - não modifique
private javax.swing.JDesktopPane jDesktopPane1;
private janelas.JInternalFrame jInternalFrame1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
// Fim da declaração de variáveis
}
Pelo que vi vc estava tentando adcionar o JDesktopPane ao JinternalFrame, mas ele é o container de JInternalFrames e deve ser inserido onde você quer que apareça o JInternalFrame, nesse caso o JFrame.