Problemas com JInternalFrame

3 respostas
M

Boa tarde galera, é o seguinte, apesar de ter lido varias informações sobre como chamar uma GUI(JInternalFrame) dentro de outra, não ficou bem claro para mim, o problema é que tenho aplicatico com uma GUI principal(JFrame), onde, esta chama outras GUI's(INternalFrame), entao tenho a seguinte situação, uma dessas GUI's, deve chamar outra GUI, contudo, esta dando erro (Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException), pelo li a respeito é problema com a refencia do meu JDesktopPane, criado na minha tela principal.

ai fica o problema como faço para chamar uma outra GUI, de dentro de outra GUI, vale lembrar q a GUI a ser chamada pode tb ser chamada da tela principal da aplicação,

desde ja agradeço..

tipo:
public class TelaPrincipal extends JFrame implements ActionListener {

private JMenuItem formarGrade;// chama a tela para formar a grade atravez do JMenuBar

private JMenuItem mostrarGrade;//chama a tela mostrar grade, o usuario tem a opção nesta tela de chamar a tela formar grade

private JButton btFormarGrade;//chama a tela para formar a grade atravez do botao
private JButton btMostrarGrade;//chama a tela mostrar grade, o usuario tem a opção nesta tela de chamar a tela formar grade 

private JDesktopPane desktop;
private TelaCadastroProfessor professor;//
private TelaCadastroAluno aluno;
protected TelaFormaGrade grade;
private TelaMostraGrade gradeAtual;


if(e.getSource()==btMostrarGrade||e.getSource()==mostrarGrade){
                mostraGrade();
        }
         
        if(e.getSource()==btFormarGrade||e.getSource()==formarGrade){
                  mostrarFormarGrade();

        }

//metodo que mostra o meu JInternalFrame selecionado 
 public void mostrarJanela(JInternalFrame frame) {
        if (desktop.getComponentZOrder(frame) == -1) {
            desktop.add(frame);
        }
        frame.setVisible(true);
        frame.setBounds(0, 100, 795, 545);
        try {
            frame.setSelected(true);
        } catch (PropertyVetoException ex) {
            Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Aqui deu erro!!!");
        }
    }

  public void mostrarFormarGrade()
     {//verifica se o JInternalFrame ja esta no desktop, senão instancia e acrescenta o mesmo
        if (grade == null)
        {
            grade = new TelaFormaGrade();
        }
        mostrarJanela(grade);
    }
}//fim da classe principal


public class TelaMostraGrade extends JInternalFrame implements ActionListener{

//nesta tela podera tambem ser chamada a tela para formar a grade

private TelaPrincipal mostra;
private TelaFormaGrade formaGrade;
private JDesktopPane desktopPai;

//aqui será invocado a tela para formar a grade
// e aqui é onde to levando a maior taca 
//
 if(e.getSource()==btnIncluirAluno)
        {
            if(formaGrade.getComponentZOrder(desktopPai)==-1)
            {
               JOptionPane.showMessageDialog(null,"teste");
               mostra.mostrarJanela(formaGrade);
            }
            //mostra.mostrarJanela(formaGrade);//este metodo esta dentro da classe principal
            mostra.mostrarFormarGrade();

        }

3 Respostas

igor_jua

Amigo, use as tags de código para podermos entender seu código.

OBS:
Logo apos a declaração de variaveis no inicio do seu cod. vc declara if’s sem que estes estejam dentro de um método…

É melhor vc postar o código certo dentro das tags de códigos.

R

Isso kra. Onde está o construtor? Verifique se vc está instanciando o desktopPane no construtor, depois de instanciado, a cada opção selecionada, vc adiciona o jinternal. Acho q tenho um exemplo bem simples kra, vou tentar localizar e posto.

M

Boa noite rjleandrodutra, cara consegui resolver o problema, foi o seguinte:
na classe que vai chamar a outra classe

private TelaPrincipal mostra;//objeto que faz a referencia da classe principal, onde esta o desktop

 public TelaPrincipal getMostra() {
        return mostra;
    }

       public void setMostra(TelaPrincipal mostra) {
        this.mostra = mostra;
    }

ai na tela principal vc coloca

public void mostraGrade() {
        if(gradeAtual==null)
        {
            gradeAtual=new TelaMostraGrade();
            gradeAtual.setMostra(this);//seta a tela que foi chamada pelo botão selecionado
        }
        mostrarJanela(gradeAtual);
    }

VLW ai pela força…

Criado 15 de novembro de 2009
Ultima resposta 16 de nov. de 2009
Respostas 3
Participantes 3