Duvida sobre Formulário jFrame [RESOLVIDO]

10 respostas
laurovitor

Ola. (não sei se estou postando no lugar certo mais e sobre interface)

Bom vamos la…

minha duvida e a seguinte:

na minha aplicação eu tenho 2 classe jFrame (janela01 e janela02).

a janela01 deve abrir permanecer alguns segundos aberta e depois fechar e abria a janela02.

o meu problema esta exatamente ai em fechar um formularia e carregar o outro eu ate testei alguns códigos que pesquisei na net porem nenhum deles fez o efeito que eu queria…

o ultimo código que eu testei era assim depois que terminar de executar as funções da janela01 ele chamava fechar();

public void fecha(){
      dipose();
      new janela02().setVisible(true);
   }

esse codigo dipose(); simplesmente não funciona

ele ate chega a carregar a janela02 mais ele carrega ela sem nada sem nenhum jLabel sem nada como ela estivesse em branco no netbeans…

eu gostaria de saber se a alguma maneira de se fazer isso.

se fosse no Visual Basic 6

eu simplesmente faria assim…

dentro da janela01:

janela02.show
unload me

ele iria carregar e mostrar a janela02 e em seguida finalizar a janela01.

10 Respostas

Metaleiro

[color=darkblue]Não está funcionando porque você está usando um novo objeto para ele fechar :[/color]

dispose();
new janela2.setVisible(true);

[color=darkblue]Você tem que pegar o obejto, ou seja, no momento que você instanciou ele e passar para o método que você está fechando a janela, isso da maneira que você achar, pode ser no construtor da classe ou simplemente passar ele como parâmetro, dai sim dar o “close” ou “dispose”, já tentou um :[/color]

janela1.setVisible(false);
Anime

Oi laurovitor,

public void fecha(){  
       new janela02().setVisible(true);
       dipose();  //o comando para fechar vem depois  
    }
laurovitor

quando eu coloco so

public void fecha(){
      dispose(); // esse comando não fecha a janela01 ela ainda continua aberta.
      janela02().setVisible(true); // ele pede pra criar o metodo janela02()
   }

agora ali no janela02() ele pede pra eu criar o metodo mais eu nao quero criar o metodo eu quero q ele chema o janela02.java e eu tenho no pacote painel

segue o codigo janela02

package painel;

import java.awt.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
import imagem.JImagePanel;
import java.awt.event.*;

public class janela02 extends javax.swing.JFrame {
    public static JLabel jLabel1;
    public static JPanel jPanel1;

    public janela02() {
        initComponents();
    }

    public janela02( String title ){
        super(title);

        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(0,0,screenSize.width, screenSize.height);
        jLabel1 = new JLabel("comando:");
        getContentPane().add(jLabel1, BorderLayout.SOUTH);

        try {
            jPanel1 = new JImagePanel( ImageIO.read( getClass().getResource( "/painelimagem/imagens/fundo1.jpg" ) ) );
        } catch ( IOException exc ) {}
        getContentPane().add(jPanel1, BorderLayout.CENTER);

  }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                janela02 frame = new janela02("");
                frame.setVisible(true);

                frame.addKeyListener(new KeyAdapter() {
                    @Override
                    public void keyPressed(KeyEvent e) {
                        switch (e.getKeyCode())
                        {
                            case 76: // L para Sair do sistema
                                jLabel1.setText("Precionado: Sair do sistema");
                                System.exit(0);
                            break; // aqui tem varias outras teclas mais nao estou utilizando elas ainda
                        }
                    }
                });
            }
        });
    }
}

o codigo da janela01 e bem semelhante porem ele so abre uma tela e fica aberto por alguns segundos depois ele chama a janela02

Anime

Oi laurovitor,

Depois que lembrei você tem que fazer isso usando o evento ActionPerformed do botão…

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    new janela02().setVisible(true);  
    dipose();  //o comando para fechar vem depois    

 }
lina

Oi,

Acho que você esqueceu de colocar a seguinte linha em seu frame01.

Tchauzin!

laurovitor

descupa ai galera mais e que eu tava no trampo e tava meio corrido la hj ai nao tinha dado pra postar o janela01

janela01.java

package painel;

import java.awt.*;
import javax.swing.*;
import java.util.Timer;
import java.util.TimerTask;

public class janela01 extends javax.swing.JFrame {
    public static JLabel jLabel1;
    Timer timer;

    public janela01 (int seconds) {
        timer = new Timer();
        timer.schedule(new contadorTask(), seconds*1000);
    }

    class contadorTask extends TimerTask {
        public void run() {
            // O código para abrir a janela02 e fechar esta janela tem que vir aqui porque aqui ele cria um delay de 5 segundos antes de executar o comando.

            timer.cancel();
        }
    }

    public janela01() {
        initComponents();
    }

    public janela01( String title ){
        super(title);

        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(0,0,screenSize.width, screenSize.height);
        jLabel1 = new JLabel("Precione uma tecla.");
        getContentPane().add(jLabel1, BorderLayout.SOUTH);
  }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 0, 0));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                janela01 frame = new janela01("");

                frame.setVisible(true);
                new janela01(5);

                frame.addKeyListener(new KeyAdapter() {
                    @Override
                    public void keyPressed(KeyEvent e) {
                        if(e != null){
                            jLabel1.setText("tecla precionada!");
                        }
                    }
                });
            }
        });
    }
}

se alguem puder me ajudar…

os exemplos citados acima não deram certo…
ainda continua pesquisando na net… mais se tiverem alguma idéia de como fazer isso eu agradeço.

lina

laurovitor:
descupa ai galera mais e que eu tava no trampo e tava meio corrido la hj ai nao tinha dado pra postar o janela01

janela01.java

package painel;

import java.awt.*;
import javax.swing.*;
import java.util.Timer;
import java.util.TimerTask;

public class janela01 extends javax.swing.JFrame {
    public static JLabel jLabel1;
    Timer timer;

    public janela01 (int seconds) {
        timer = new Timer();
        timer.schedule(new contadorTask(), seconds*1000);
    }

    class contadorTask extends TimerTask {
        public void run() {
            // O código para abrir a janela02 e fechar esta janela tem que vir aqui porque aqui ele cria um delay de 5 segundos antes de executar o comando.

            timer.cancel();
        }
    }

    public janela01() {
        initComponents();
    }

    public janela01( String title ){
        super(title);

        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(0,0,screenSize.width, screenSize.height);
        jLabel1 = new JLabel("Precione uma tecla.");
        getContentPane().add(jLabel1, BorderLayout.SOUTH);
  }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 0, 0));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                janela01 frame = new janela01("");

                frame.setVisible(true);
                new janela01(5);

                frame.addKeyListener(new KeyAdapter() {
                    @Override
                    public void keyPressed(KeyEvent e) {
                        if(e != null){
                            jLabel1.setText("tecla precionada!");
                        }
                    }
                });
            }
        });
    }
}

se alguem puder me ajudar…

os exemplos citados acima não deram certo…
ainda continua pesquisando na net… mais se tiverem alguma idéia de como fazer isso eu agradeço.

Oi,

Na linha 66 vc esta criando uma JFrame e na linha 69 vc esta criando um JFrame novamente. Ou seja, vc tem 2 JFrames abertos =D

Bom, eu faria algo do tipo (Não sei se o código irá funcionar pq estou sem compilador):

package painel;

import java.awt.*;
import javax.swing.*;
import java.util.Timer;
import java.util.TimerTask;

public class janela01 extends javax.swing.JFrame {
    public static JLabel jLabel1;
    Timer timer;
    public static janela01 = null;

    public static void TimerSet (int seconds) {
        timer = new Timer();
        timer.schedule(new contadorTask(), seconds*1000);
    }

    class contadorTask extends TimerTask {
        public void run() {
            // O código para abrir a janela02 e fechar esta janela tem que vir aqui porque aqui ele cria um delay de 5 segundos antes de executar o comando.

            timer.cancel();

            if (janela01 != null)
            janela01.dispose();
        }
    }

    public janela01() {
        initComponents();
    }

    public janela01( String title ){
        super(title);

        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(0,0,screenSize.width, screenSize.height);
        jLabel1 = new JLabel("Precione uma tecla.");
        getContentPane().add(jLabel1, BorderLayout.SOUTH);
  }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 0, 0));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

janela01 = this;

        pack();
    }// </editor-fold>

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                janela01 frame = new janela01("");

                frame.setVisible(true);
                frame.TimerSet(5);

                frame.addKeyListener(new KeyAdapter() {
                    @Override
                    public void keyPressed(KeyEvent e) {
                        if(e != null){
                            jLabel1.setText("tecla precionada!");
                        }
                    }
                });
            }
        });
    }
}

Tchauzin!

laurovitor

bom galera ta dificio aqui ate agora ninguem consegui me ajudar aqui no forum e nem to achando nada na net q faça o que eu quero fazer.

1 - o meu programa abre uma janela full screen e fica aberta por 5 seg com uma msg (esta janela esta ok) aqui e uma classe jFrame chamado [color=orange]janela01[/color].java
2 - o programa abre uma janela do sistema full screen com a tela principal do software (esta janela tmb esta ok) aqui e outra class jFrame chamado [color=blue]janela02[/color].java

o meu problema e o seguinte:

apos os 5seg (um timer q eu criei) ele tem q executar um comando que fecha a [color=orange]janela01[/color] e abra a [color=blue]janela02[/color]

em alguns codigos q eu achei na net ele ate abre uma nova janela mais como disse em cima ele nao abre a janela02 e sim uma nova jFrame e nao finaliza a janela01 e nenhum dos codigos que sugerirao acima nao deu certo.

ainda continuo a procurar pela net e tmb espero que alguem aqui possa me dar uma luz o que eu acho dificio e que tem muito poca coisa na net sobre java comparado a outras liguagens… mais fazer o que né sou brasileiro e nao desisto nunca… assim q eu fizer isso funcionar prometo postar aqui um exemplo =]

ambos os codigos da [color=orange]janela01 [/color]e [color=blue]janela02 [/color]estao postado acima.

obrigado.

lina

Oi,

Você precisa parar de tentar achar a solução na net e analisar quais são as possibilidades e quais jogadas vc poderá usar.

Como eu falei anteriormente, estava sem compilador e não tinha como saber iria funcionar sem erros. A lógica está correta, porém com erros na compilação.

Achei que você iria tentar modifica-la... Segue abaixo as classes funcionando:

JANELA01

package painel; 

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.*;
import java.util.Timer;
import java.util.TimerTask;

public class janela01 extends javax.swing.JFrame {
	
    public static JLabel jLabel1;
    static Timer timer;
    
    // 
    // Receberá a referencia da janela.
    //
    public JFrame references_window = null;    
    
    public void TimerSet (int seconds) {
        timer = new Timer();
        timer.schedule(new contadorTask(), seconds*1000);
    }

    public class contadorTask extends TimerTask {
        public void run() {
            // O código para abrir a janela02 e fechar esta janela tem que vir aqui porque aqui ele cria um delay de 5 segundos antes de executar o comando.

            timer.cancel();

            //
            // Se tem alguma referencia, fecha a janela e abre o janela2.
            //
            if (references_window != null) {
        	   references_window.dispose();
        	   
        	   //
        	   // Chama a janela 2.
        	   //
        	   janela02
        	   window_2 = new janela02();
        	   window_2.setVisible(true);
            }
        }
    }

    public janela01() {
        initComponents();
    }

    public janela01( String title ){
        super(title);

        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(0,0,screenSize.width, screenSize.height);
        jLabel1 = new JLabel("Precione uma tecla.");
        getContentPane().add(jLabel1, BorderLayout.SOUTH);
        
        setVisible(true);
        
        //
        // Alimenta a referencia.
        //
        references_window = this;
        
        //
        // Seta o timer.
        //
        TimerSet(5);
  }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(0, 0, 0));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
        
        //
        // Alimenta a referencia.
        // OBS: Descomentar se for usar esse método initComponents.
        //references_window = this;
        
        pack();
        
    }// </editor-fold>

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
        	    
        	//
        	// Apenas chama a janela e não faz mais nada.
        	//
                janela01 frame = new janela01("");

                frame.addKeyListener(new KeyAdapter() {
                    @Override
                    public void keyPressed(KeyEvent e) {
                        if(e != null){
                            jLabel1.setText("tecla precionada!");
                        }
                    }
                });
            }
        });
    }
}

JANELA02

package painel; 

import java.awt.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
import imagem.JImagePanel;
import java.awt.event.*;

public class janela02 extends javax.swing.JFrame {
    public static JLabel jLabel1;
    public static JPanel jPanel1;

    public janela02() {
        initComponents();
    }

    public janela02( String title ){
        super(title);

        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        setUndecorated(true);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(0,0,screenSize.width, screenSize.height);
        jLabel1 = new JLabel("comando:");
        getContentPane().add(jLabel1, BorderLayout.SOUTH);

       try {
            jPanel1 = new JImagePanel( ImageIO.read( getClass().getResource( "/painelimagem/imagens/fundo1.jpg" ) ) );
        } catch ( IOException exc ) {}
        getContentPane().add(jPanel1, BorderLayout.CENTER);

  }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                janela02 frame = new janela02("");
                frame.setVisible(true);

                frame.addKeyListener(new KeyAdapter() {
                    @Override
                    public void keyPressed(KeyEvent e) {
                        switch (e.getKeyCode())
                        {
                            case 76: // L para Sair do sistema
                                jLabel1.setText("Precionado: Sair do sistema");
                                System.exit(0);
                            break; // aqui tem varias outras teclas mais nao estou utilizando elas ainda
                        }
                    }
                });
            }
        });
    }
}

Pegue as duas, compile e veja o resultado. Coloquei em comentário o que acabei fazendo.

Qualquer dúvida, post aqui...

Tchauzin!

laurovitor

Ola.

Obrigado a todos que postarao aqui.

Consegui resolver o problema de abrir o segundo jFrame

porem de uma maneira totalmente diferente.

eu criei uma class para controlar as janelas assim fico bem mais facio simples e tmb reduziu varias e varias linhas de códigos.

se alguem precisar e so avisar q eu do uma dica de como eu fiz.

Criado 16 de novembro de 2010
Ultima resposta 19 de nov. de 2010
Respostas 10
Participantes 4