Abrir uma outra janela através de um botão

8 respostas
E

Boa tarde galera,
Gostaria se possível que vocês me ajudassem com um probleminha besta…

Estou criando uma aplicação para fins de estudo que calcule as dívidas de uma casa, bem bestinha, na parte matemática nada de tão complexo, porém, preciso fazer isso na parte gráfica.

A primeira tela tem todos os itens, ele recebe os valores e gera o total num JTextField, lá tem um botão de rendimentos, onde a pessoa colocará tudo o que ele ganha, essa janela eu não consigo fazer aparecer, pra ser mais exato nunca fiz um programa que tivesse mais de uma janela…

Imaginei algo desse tipo…

import java.awt.*;    
import java.awt.event.*;   
import javax.swing.*;   
class Calcular extends JFrame implements ActionListener    
{   
  JLabel lblAgua, lblLuz, lblTelefone, lblCondominio, lblEscola, lblCompras, lblCurso1, lblCurso2, lblExtra1, lblExtra2, lblTotal, lblTotalRendimentos, lblDiferenca;   
  JTextField txtAgua, txtLuz, txtTelefone, txtCondominio, txtEscola, txtCompras, txtCurso1, txtCurso2, txtExtra1, txtExtra2, txtTotal, txtTotalRendimentos, txtDiferenca;   
  JButton btSalvar, btLimpar, btCalcular, btSair, btRendimentos;   
  
  Calcular()    
  {   
    setTitle("Contas a pagar");    
    setSize(500,500);    
    setLocation(150,150);       
    setResizable(true);    
    getContentPane().setBackground(Color.gray);     
       
    lblAgua = new JLabel("Água");   
    txtAgua = new JTextField();   
    lblAgua.setBounds(5,15,40,20);   
    txtAgua.setBounds(5,35,100,20);   
       
       
    lblLuz = new JLabel("Luz");   
    txtLuz = new JTextField();   
    lblLuz.setBounds(140,15,40,20);   
    txtLuz.setBounds(140,35,100,20);   
       
       
    lblTelefone = new JLabel("Telefone");   
    txtTelefone = new JTextField();   
    lblTelefone.setBounds(5,65,80,20);   
    txtTelefone.setBounds(5,85,100,20);   
       
       
    lblCondominio = new JLabel("Condominio");   
    txtCondominio = new JTextField();   
    lblCondominio.setBounds(140,65,80,20);   
    txtCondominio.setBounds(140,85,100,20);   
       
       
    lblEscola = new JLabel("Escola");   
    txtEscola = new JTextField();   
    lblEscola.setBounds(5,115,80,20);   
    txtEscola.setBounds(5,135,100,20);   
       
           
    lblCompras = new JLabel("Compras");   
    txtCompras = new JTextField();    
    lblCompras.setBounds(140,115,80,20);   
    txtCompras.setBounds(140,135,100,20);   
       
    lblCurso1 = new JLabel("Curso 1");   
    txtCurso1 = new JTextField();    
    lblCurso1.setBounds(5,165,80,20);   
    txtCurso1.setBounds(5,185,100,20);   
       
       
    lblCurso2 = new JLabel("Curso 2");   
    txtCurso2 = new JTextField();    
    lblCurso2.setBounds(140,165,80,20);   
    txtCurso2.setBounds(140,185,100,20);   
       
       
    lblExtra1 = new JLabel("Extra 1");   
    txtExtra1 = new JTextField();    
    lblExtra1.setBounds(5,215,80,20);   
    txtExtra1.setBounds(5,235,100,20);   
       
       
    lblExtra2 = new JLabel("Extra 2");   
    txtExtra2 = new JTextField();    
    lblExtra2.setBounds(140,215,80,20);   
    txtExtra2.setBounds(140,235,100,20);   
       
    
    lblTotalRendimentos = new JLabel("Total de rendimentos");   
    txtTotalRendimentos = new JTextField();   
    txtTotalRendimentos.setEditable(false);   
    lblTotalRendimentos.setBounds(5,275,120,20);   
    txtTotalRendimentos.setBounds(5,295,120,20);   
       
       
    lblTotal = new JLabel("Total a pagar");   
    txtTotal= new JTextField();   
    txtTotal.setEditable(false);   
    lblTotal.setBounds(5,325,120,20);   
    txtTotal.setBounds(5,345,120,20);   
       
       
    lblDiferenca = new JLabel("Diferença");   
    txtDiferenca = new JTextField();    
    txtDiferenca.setEditable(false);   
    lblDiferenca.setBounds(5,375,120,20);   
    txtDiferenca.setBounds(5,395,120,20);   
       
    btCalcular = new JButton("Calcular");   btCalcular.addActionListener(this);   
    btCalcular.setBounds(270,35,100,20);   
       
    btSalvar = new JButton("Salvar");   btSalvar.addActionListener(this);   
    btSalvar.setBounds(270,85,100,20);   
           
    btLimpar = new JButton("Limpar");   btLimpar.addActionListener(this);   
    btLimpar.setBounds(270,135,100,20);   
       
    btSair = new JButton("Sair");   btSair.addActionListener(this);   
    btSair.setBounds(270,185,100,20);   
       
    btRendimentos = new JButton("Rendimentos");   btRendimentos.addActionListener(this);   
    btRendimentos.setBounds(250,295,130,20);   
       
       
    getContentPane().setLayout(null);   
    getContentPane().add(lblAgua);   
    getContentPane().add(txtAgua);   
       
    getContentPane().add(lblLuz);   
    getContentPane().add(txtLuz);   
       
    getContentPane().add(lblTelefone);   
    getContentPane().add(txtTelefone);   
       
    getContentPane().add(lblCondominio);   
    getContentPane().add(txtCondominio);   
       
    getContentPane().add(lblEscola);   
    getContentPane().add(txtEscola);   
       
    getContentPane().add(lblCompras);   
    getContentPane().add(txtCompras);   
       
    getContentPane().add(lblCurso1);   
    getContentPane().add(txtCurso1);   
       
    getContentPane().add(lblCurso2);   
    getContentPane().add(txtCurso2);   
       
    getContentPane().add(lblExtra1);   
    getContentPane().add(txtExtra1);   
       
    getContentPane().add(lblExtra2);   
    getContentPane().add(txtExtra2);   
       
    getContentPane().add(lblTotalRendimentos);   
    getContentPane().add(txtTotalRendimentos);   
       
    getContentPane().add(lblTotal);   
    getContentPane().add(txtTotal);   
       
    getContentPane().add(lblDiferenca);   
    getContentPane().add(txtDiferenca);   
       
    getContentPane().add(btCalcular);   
    getContentPane().add(btSalvar);   
    getContentPane().add(btLimpar);   
    getContentPane().add(btSair);   
    getContentPane().add(btRendimentos);   
       
  }   
       
  public void actionPerformed(ActionEvent e)   
  {   
    if (e.getSource()==btCalcular)   
    {   
      float agua, luz, telefone, condominio, escola, compras, curso1, curso2, extra1, extra2, total, totalRendimentos, diferenca;   
      agua = Float.parseFloat(txtAgua.getText());   
      luz = Float.parseFloat(txtLuz.getText());   
      telefone = Float.parseFloat(txtTelefone.getText());   
      condominio = Float.parseFloat(txtCondominio.getText());   
      escola = Float.parseFloat(txtEscola.getText());   
      compras = Float.parseFloat(txtCompras.getText());   
      curso1 = Float.parseFloat(txtCurso1.getText());   
      curso2 = Float.parseFloat(txtCurso2.getText());   
      extra1 = Float.parseFloat(txtExtra1.getText());   
      extra2 = Float.parseFloat(txtExtra2.getText());   
         
      total = agua + luz + telefone + condominio + escola + compras + curso1 + curso2 + extra1 + extra2;   
      txtTotal.setText("" + total);   
         
      totalRendimentos = Float.parseFloat(txtTotalRendimentos.getText());   
         
      diferenca = totalRendimentos - total;   
         
      txtDiferenca.setText("" + diferenca);   
      return;   
    }   
       
    if (e.getSource()==btLimpar)   
    {   
       txtAgua.setText("");   
       txtLuz.setText("");   
       txtTelefone.setText("");   
       txtCondominio.setText("");   
       txtEscola.setText("");   
       txtCompras.setText("");   
       txtCurso1.setText("");   
       txtCurso2.setText("");   
       txtExtra1.setText("");   
       txtExtra2.setText("");   
       txtTotal.setText("");   
       txtTotalRendimentos.setText("");   
       txtDiferenca.setText("");   
    }   
       
    if (e.getSource()==btSair)   
    {   
       System.exit(0);   
    }   
       
    if (e.getSource()==btSalvar)   
    {   
          
    }   
       
    if (e.getSource()==btSalvar)   
    {   
          
    }   
       
    if (e.getSource()==btRendimentos)   
    {   
       //Eu acho que tenho que chamar a classe aqui, né???   
    }   
  }   
     
  public class Rendimentos extends JFrame{   
        
     JLabel lblNome, lblRenda;   
     JButton btAdd, btLimpar, btFechar;   
     JTextField txtNome, txtRenda;   
     JList lista;   
        
     Rendimentos(){   
           setTitle("Detalhamento de Rendimentos");    
          setSize(400,400);    
          setLocation(150,150);       
          setResizable(true);    
          getContentPane().setBackground(Color.gray);   
             
          lblNome = new JLabel("Descrição da Renda");   
          txtNome = new JTextField();   
             
             
             
          lblRenda = new JLabel("Valor");   
          txtRenda = new JTextField();    
             
     }   
  }   
     
  public static void main(String args[])   
  {   
       JFrame janela = new Calcular();   
       janela.setUndecorated(true);   
       janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);   
       janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
       janela.setVisible(true);   
  }   
}

Imaginei que tivesse que criar uma class e chama-la nos eventos, mas como eu faço isso…Se realmente for isso???

8 Respostas

E

Só pra ficar mais claro, acho que o problema está aqui…

if (e.getSource()==btRendimentos)     
    {     
       //Eu acho que tenho que chamar a classe aqui, né???     
    }     
  }     
       
  public class Rendimentos extends JFrame{     
           
     JLabel lblNome, lblRenda;     
     JButton btAdd, btLimpar, btFechar;     
     JTextField txtNome, txtRenda;     
     JList lista;     
           
     Rendimentos(){     
           setTitle("Detalhamento de Rendimentos");       
          setSize(400,400);       
          setLocation(150,150);         
          setResizable(true);       
          getContentPane().setBackground(Color.gray);     
               
          lblNome = new JLabel("Descrição da Renda");     
          txtNome = new JTextField();     
               
               
               
          lblRenda = new JLabel("Valor");     
          txtRenda = new JTextField();       
               
     }
drsmachado

Crie esta nova janela e no evento do botão, apenas adicione a chamada ao construtor:

//código aqui
//declaração da instância da outra tela
NovaJanela nova;
//mais código
//evento do botão
...
nova = new NovaJanela();
nova.setVisible(true);

Detalhe, o setVisible pode estar tanto no método construtor da classe a ser chamada quanto no método que a chama na janela principal.
Da mesma forma, use o setDefaulCloseOperation(JFrame.DISPOSE_ON_CLOSE);
(ou no construtora da janela ou após instanciá-la na janela principal), assim, ao fechar a janela filho, não fechará a principal.

E

drsmachado

Mto grato, problema resolvido…

E

Para fins de quem tiver a mesma dúvida… Conforme passado pelo drsmachado resolvi dessa forma…

Rendimentos rend = new Rendimentos();
    if (e.getSource()==btRendimentos)
    {
    	rend.setVisible(true);
    }
  }
  
  public class Rendimentos extends JFrame{
	  
	  JLabel lblNome, lblRenda;
	  JButton btAdd, btLimpar, btFechar;
	  JTextField txtNome, txtRenda;
	  JList lista;
	  
	  Rendimentos(){
		  	setTitle("Detalhamento de Rendimentos"); 
		    setSize(400,400); 
		    setLocation(150,150);    
		    setResizable(true); 
		    getContentPane().setBackground(Color.gray);
		    
		    lblNome = new JLabel("Descrição da Renda");
		    txtNome = new JTextField();
		    
		    
		    
		    lblRenda = new JLabel("Valor");
		    txtRenda = new JTextField(); 
		    
	  }
leoviniga

aproveitando o tópico…
é bom não usar tanto setBounds…o código fica cheio de coordenadas estranhas e dificulta a manipulação

E

leoviniga

Realmente, mas nesse exemplo, não teve outro jeito, tentei usar o GridLayout mas não ficava desse jeito…
Até prefiro usar o Layout, sou estudante ainda de JAVA e nas poucas aplicações que fiz trabalhando com interface ele facilita muito a vida, mas nesse caso eu não tive outra saída!!!

leoviniga

Dava pra fazer por GridBagLayout…comecei a usar esse layout a poco tempo e já facilitou bastante a minha vida…

quizer dar uma olhada… http://javafree.uol.com.br/artigo/5792/Tudo-sobre-o-GridBagLayout.html

Té mais

E

Já estou lendo…
Obrigado pela dica!!!

Criado 3 de fevereiro de 2011
Ultima resposta 3 de fev. de 2011
Respostas 8
Participantes 3