Problemas com janela. Ajuda urgende, plz!

9 respostas
irk

Bom dia,

Estou meio que “iniciando” com JAVA e estou tendo uns probleminhas com janelas.

A situação é a seguinte:
*Desenvolver um programa que receba dados e gere um certificado através destes.
*Problema: consegui criar a janela principal (incial) do programa com um menu, mas não consigo chamar a segunda (janela simples para o recebimento dos dados) a partir deste.

Seugue abaixo o código.

Obrigado.

Tela principal

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class tela_principal extends JFrame implements ActionListener {
	
	public JMenuBar barra = null;
	public JMenu menu01 = null;
	public JMenuItem item01, item02 = null;
	
	public tela_principal() {
		super();
		iniciar();
	}
	
	public void iniciar(){
		this.setTitle("Programa");  
        this.setJMenuBar(getbarraMenu());  
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
        this.setSize(800,800);  
        this.setVisible(true);
	}
	
	private JMenuBar getbarraMenu() {  
        if (barra == null){  
            barra = new JMenuBar();  
            barra.add(getmenuArquivo());  
        }  
        return barra;}
        
        private JMenu getmenuArquivo() {  
            if (menu01 == null){  
                menu01 = new JMenu();  
                menu01.setText("Arquivo");  
                menu01.add(getitemMenu());
                menu01.addSeparator();
                menu01.add(getitemMenu2());
            }  
             return menu01;  
         }
        
        private JMenuItem getitemMenu() {  
            if (item01 == null){  
                item01 = new JMenuItem();  
                item01.setText("Novo");
                item01.addActionListener(this);
            }  
            return item01;  
        }
        
        private JMenuItem getitemMenu2() {  
            if (item02 == null){  
                item02 = new JMenuItem();  
                item02.setText("Sair");
                item02.addActionListener(this);
            }  
            return item02;  
        }
        
        public void actionPerformed(ActionEvent e) {
            tela_principal t_p = new tela_principal();
           
            if(e.getSource() == item02) {
               System.exit(0);
            }
            
            if(e.getSource() == item01) {
               tela_01 emitirCert = new tela_01();
               emitirCert.tela_01();
            }
        }
    
	public static void main(String[] args) {
		new tela_principal();

	}

}
Tela secundária (ainda em desenvolvimento)

[/code]

import javax.swing.JDialog;

import javax.swing.<em>;

import java.awt.</em>;

public class tela_01 extends JDialog {

public void tela_01()  {
    this.setTitle("Cert");
    this.setSize(700,350);
    this.setResizable(false);
    this.alignCenter();
    this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    getContentPane().setLayout(null);
}


public void t_01() {
	tela_01 emititirCert = new tela_01();
	emititirCert.setTitle("Emitir certificado");
	emititirCert.setSize(550,250);
	emititirCert.setResizable(false);
	emititirCert.setModal(true);
	emititirCert.alignCenter();
	emititirCert.getContentPane().setLayout(null);
}

public void alignCenter() {
    Dimension t = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension j = getSize();
    setLocation((t.width-j.width)/2,(t.height-j.height)/2);
}

}

9 Respostas

Filipe_Portes

Seu problema esta facil de resolver:

public void actionPerformed(ActionEvent e) {  
             tela_principal t_p = new tela_principal();  
              
             if(e.getSource() == item02) {  
                System.exit(0);  
             }  
               
             if(e.getSource() == item01) {  
                tela_01 emitirCert = new tela_01();  
                emitirCert.tela_01();  
             }  
         }

substitua por:

public void actionPerformed(ActionEvent e) {  
             
             
             if(e.getSource() == item02) {  
                System.exit(0);  
             }  
               
             if(e.getSource() == item01) {  
                tela_01 emitirCert = new tela_01();  
                emitirCert.setVisible(true);  
            }  
         }

quando quiser que a tela desapareça use setVisible(false);

OK, espero que te ajude T+!

irk

Bem Filipe, obrigado pela orientação, mas não funcionou. Quando eu acrescentei o [color=darkblue]true[/color] como você sugeriu, nem o menu de “sair” funcionou mais. Quando eu não coloco o [color=darkblue]true[/color] e aperto o menu “novo”, ele abre a mesma janela já aberta de novo. Alguma outra sugestão?

Obrigado.

eros.stein

Eu faço assim:

Crie um JDesktopPane

JDesktopPane JDP_desktop = new JDesktopPane();

depois adicione seus objetos a ele. Dentro da ação do seu botão coloque:

JDP_desktop.add(sua_janela); sua_janela.setVisible(true);

Abraço.

eros.stein

OBS:

JDP_desktop.add(sua_janela);

você pode ou, dependendo da sua aplicação, deve adicionar os objetos da sua JInternalFrame com o comando:

sua_janela.add(campo_de_texto); sua_janela.add(etiqueta); sua_janela.add(objetoN);

Lembrando que você está criando uma MDI dentro da ação do seu botão, então não esqueça de definir o layout dela no ínicio:

sua_janel.setLayout(seu_layout);
irk

Caramba!!! Obrigado pela ajuda eros.stein, mas o problema era outro. Eu estava cometendo um pequeno errinho de “gramática”. Enquanto na tela principal eu chamava “emitir”, na tela secundária eu tinha digitado como “emititir”. Agora ele está abrindo a nova janela, mas com um outro problema: quande ele abre a tela 02, ele também abre uma nova tela principal. Como faço para resolver essa agora?

eros.stein

Você está instanciando duas vezes…
Aqui:

public void actionPerformed(ActionEvent e) { tela_principal t_p = new tela_principal();

e no seu main.

Por isso está criando duas janelas.

eros.stein

Ele cria uma na iniciação do seu programa, no main, e cria outra quando dispara o evento do botão.
Entendeu?

irk

Caro eros.stein, muito obrigado pela ajuda. O erro era esse mesmo. Eu estava iniciando ela porque o programa que eu estava me baseando para fazer não contiha método main, por isso ela não abria duas vezes. Agora vou ficar mais esperto com essas coisas. Obrigado pela ajuda até o momento.

eros.stein

Por nada :smiley:
Precisando, a comunidade está aí :smiley:

Criado 17 de setembro de 2007
Ultima resposta 17 de set. de 2007
Respostas 9
Participantes 3