[RESOLVIDO]Como refatorar um JFrame para um JInternalFrame?

Bom dia pessoal,

estou fazendo minha aplicação GUI com o Netbeans 7.0.1. Gostaria de criar uma aplicação MDI e ao criar meu primeiro JFrame (que deveria ser filho), percebi que deveria ter criado herdando de JInternalFrame.

Só que agora, não estou conseguindo refatorar para JInternalFrame.

Tentei mudar na mão, só que nas declarações fixas da IDE está chiando no método ‘setAlwaysOnTop(true);’ que obviamente não é da classe JInternalFrame.

Dúvida, vou ter que deletar a classe Jframe e re-criar uma JInternalFrame ???
Não é possível refatorar?

Será que alguém pode ajudar?

Uma possível saída é abrir o arquivo JAVA e o arquivo FORM criados pelo NetBeans num editor de texto como o Bloco de Notas ou o Notepad++, e substituir todas as referências a JFrame por JInternalFrame. As linhas correspondentes ao método setAlwaysOnTop() podem ser simplesmente excluídas. Não se esqueça de fazer backup do seu formulário para o caso de algo dar errado! :slight_smile:

Roger,

fiz a troca de classe manualmente e deu certo. Porém agora o form não é exibido. Segue o meu código:

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
  FrmViewFuncionario objViewFuncionario = new FrmViewFuncionario();
  
  objViewFuncionario.setLocation(10, 100);
  objViewFuncionario.setVisible(true);
}  

Alguém pode ajudar?

Para exibir um JInternalFrame, é necessário adicioná-lo a um JDesktopPane. Não é possível exibi-lo da mesma maneira que se faz com um JFrame.

Roger,

em tese já entendi. Veja como está:

Meu frame principal

 private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
  try
  {
    FrmViewFuncionario objViewFuncionario = new FrmViewFuncionario(new JDesktopPane());
  }
  catch (Exception e)
  {
    e.printStackTrace();;
  }
}    

Meu internal frame:

  public FrmViewFuncionario(JDesktopPane desktop) 
  {
    try 
    {
      desktop.add(this);
      setVisible(true);

      initComponents();
    } 
    catch (Exception e) 
    {
      e.printStackTrace();
    }
  }

Só que o internal frame continua sem aparecer???

Ainda é necessário posicionar e dimensionar o JInternalFrame. Segue um exemplo:

import java.awt.BorderLayout;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;

public class DeskPane {
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override public void run() {
        criaFormPrincipal();
      }});
  }

  private static void criaFormPrincipal() {
    JFrame frame = new JFrame("Frame Principal");
    frame.setLocation(10, 10);
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BorderLayout());

    JDesktopPane desktop = new JDesktopPane();
    frame.add(desktop, BorderLayout.CENTER);

    JInternalFrame intFrame = new JInternalFrame(
      "Frame Interno", true, true, true, true);
    intFrame.setLocation(10, 10);
    intFrame.setSize(300, 300);
    intFrame.setVisible(true);

    desktop.add(intFrame);

    frame.setVisible(true);
  }
}

VALEU,
RESOLVIDO.