Duvida sobre abrir outra janela na GUI

Sou iniciante em Interface Gráfica e sei bem pouco a respeito, tenho que fazer um trabalho em grupo pra faculdade, e a entrega de amanhã é uma interface que mais tarde será usada juntamente com MySql para exibir dados sobre represas.

Eu e meu grupo encontramos dificuldade em abrir uma nova janela ao clicar em um dos botões da Interface, procuramos e tentamos de varias formas e não deu.

No codigo que eu postei aí embaixo, ao clicar em Porcentagem do Sistema e escolher um numero, ele deveria abrir uma outra janela que mostraria opções relacionadas a data da pesquisa, gostaria que alguém explicasse ou até mesmo mostrasse como isso seria feito. Agradeço desde já!

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Projeto extends JFrame implements ActionListener
{
   private JTextArea txtResultado;
   public JFrame JFrame2;
   public JButton btnPorcentagemSistema, btnCadastroPorcentagem, btnSistemasDasCidades, btnCreditosCriacao, btnRepresas, btnFecharPrograma;
   public int x;
   public Projeto()
   {
      super("Manancias");
      
      txtResultado = new JTextArea(20,31);
      txtResultado.setEditable(false);
      txtResultado.setLineWrap(true);
      btnPorcentagemSistema = new JButton("Porcentagem do Sistema");
      btnCadastroPorcentagem = new JButton("Cadastro da Porcentagem");
      btnSistemasDasCidades = new JButton("Sistema das cidades");
      btnCreditosCriacao = new JButton("Creditos da Criacao");
      btnRepresas = new JButton("Represas");
      btnFecharPrograma = new JButton("Fechar o Programa");
      
      JScrollPane jScroll= new JScrollPane(txtResultado);
      jScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

      Container border = getContentPane();
      
      
      
      border.setLayout(new BorderLayout());
      JPanel grid = new JPanel();
      grid.setLayout(new GridLayout(3,3));
        
      border.add(txtResultado, BorderLayout.WEST);
      border.add(grid, BorderLayout.EAST);
      grid.add(btnPorcentagemSistema);
      grid.add(btnCadastroPorcentagem);
      grid.add(btnSistemasDasCidades); 
      grid.add(btnCreditosCriacao); 
      grid.add(btnRepresas); 
      grid.add(btnFecharPrograma);
      
      btnPorcentagemSistema.addActionListener(this);
      btnCadastroPorcentagem.addActionListener(this); 
      btnSistemasDasCidades.addActionListener(this); 
      btnCreditosCriacao.addActionListener(this); 
      btnRepresas.addActionListener(this); 
      btnFecharPrograma.addActionListener(this);
      
      setResizable(false);
      setSize(710, 400);
      setLocationRelativeTo(null);
      setVisible(true);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
   public void actionPerformed(ActionEvent e)
   {
      if(e.getSource() == btnPorcentagemSistema)
      { 
        x = Integer.parseInt(JOptionPane.showInputDialog("Informe o Sistema Desejado: \n 1)Cantareira\n 2)Alto do Tiete \n 3)Guarapiranga \n 4)Rio Grande \n 5)Rio Claro \n 6)Alto Cotia \n 7)Baixa Cotia \n 8)Rib . Estiva  ")); 
         if(x == 1)
      {
         
      }

      }
      
      if(e.getSource() == btnCadastroPorcentagem)
      {
         int senha;
         
         do
         {
            senha = Integer.parseInt(JOptionPane.showInputDialog("Informe a senha de acesso"));
         }while(senha != 1234);
         
         JOptionPane.showInputDialog("Informe a porcentagem do Sistema do dia");
         
      }else if(e.getSource() == btnSistemasDasCidades)
      {
         JOptionPane.showInputDialog("Informe a cidade desejada");
         
      }else if(e.getSource() == btnCreditosCriacao)
      {
         txtResultado.setText("Programa desenvolvido por: " + "\n" + "Abdelkarim" + "\n" + "Camila" + "\n" + "Daniel" + "\n" + "Francisco" + "\n" + "Gabriel" + "\n" + "Kaio" + "\n" + "Yuri");
         
      }else if(e.getSource() == btnRepresas)
      {
         JOptionPane.showInputDialog("Informe a represa desejada");
         
      }else if(e.getSource() == btnFecharPrograma)
      {
         System.exit(0);
      }
   }
   public static void main(String[] args)
      {
         new Projeto();
      }
}
1 curtida

Voce não pode fazer pelo Build do netBeans?

Cara, tipo, ces querem abrir uma tela dentro do JFrame?
Usa o JInternalFrame…
Cria uma outra classe e configura o JInternalFrame como se fosse um JFrame normal. E coloca mais isso:

No inicio dessa tua classe do JInternalFrame, instancia tua classe principal, a que tem o JFrame. No final do teu metodo pra criar a tela interna, coloca suaIntenciaPrincipal.this.add(seuInternalFrame);
E na ação do botão, ou menu, ou seja la onde for clicar, instancia sua Classe onde tem o JInternalFrame e chama o metodo que ce criou a tela

//um exemplo rapido
// digamos que to na minha classe Principal
void criarTela() {
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(botao);
botao.addActionListener(this);
setVisible(true);
}

if(e.getSource() == botao) {
Classe2 c2 = new Classe2();
c2.criarTela();
}

// Agora to na Classe 2, a que tem meu JInternalFrame
Principal principal = new Principal(); // instanciei minha classe principal
void criarTela(){ // crio meu metodo pra tela secundaria, meu JInternalFrame
seuInternalFrame.setBounds(20,20,500,500);
seuInternalFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
seuInternalFrame.setClosable(true);
seuInternalFrame.setVisible(true);
principal.this.add(seuInternalFrame);

}

Se for no NetBeans, usa a Build dele

Eu fiz tudo como cê explicou mano, criei a nova classe, fiz um grid la tento pra testar, só que não coloquei dentro de um metodo, intanciei a minha outra classe e no final obtive o seguinte erro:

 IntFrame1.java:31: error: not an enclosing class: Projeto
          Projeto.this.add(intFrame);
                 ^

O que isso significa?

Cara, cria o metodo e chama lá no evento, da tua outra classe. Tira o JInternalFrame então, coloca um JOptionPane, pra ver se tá chamando o metodo certinho.

Manda teu código dessa classe que tu criou

Deve ter muita coisa errada, esse negócio de interface ainda é meio confuso pra mim, o código é esse:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class IntFrame1 extends JFrame implements ActionListener{
   
   private JButton btnTeste, btnTeste2, btnTeste3;
   private JTextField txtNum;
   private JFrame intFrame;
   
   public IntFrame1(){
      super("Internal Frame");
      txtNum = new JTextField(1);
      btnTeste = new JButton("btnTeste");
      btnTeste2 = new JButton("btnTeste2");
      btnTeste3 = new JButton("btnTeste3");
      intFrame = new JFrame();
      
      intFrame.setLayout(new GridLayout(3,1));
      intFrame.add(btnTeste);
      intFrame.add(btnTeste2);
      intFrame.add(btnTeste3);
      
      btnTeste.addActionListener(this);
      btnTeste2.addActionListener(this);
      btnTeste3.addActionListener(this);
      intFrame.setBounds(20,20,500,300);
      intFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
      intFrame.setVisible(true);
      
      Projeto projeto = new Projeto();
      Projeto.this.add(intFrame);
      
   }
   
   public void actionPerformed(ActionEvent e){
   
   }
}

Seguinte.
JFrame, entenda que é o Frame principal. Seria como o seu desktop, área de trabalho, etc.
JInternalFrame, é um frame secundario. Seria como as pastas que ce abre.

Ao invés de colocar JFrame novamente, colocar JInternalFrame e tira o extends JFrame, deixa apenas o implements ActionListener. Se quiser copiar e colar…


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class IntFrame1 implements ActionListener{
   
   private JButton btnTeste, btnTeste2, btnTeste3;
   private JTextField txtNum = new JTextField();
   private JInternalFrame intFrame = new JInternalFrame("Seu IntenalFrame");
   
   public criarTela(){
      btnTeste = new JButton("btnTeste");
      btnTeste2 = new JButton("btnTeste2");
      btnTeste3 = new JButton("btnTeste3");
      
      intFrame.setLayout(new GridLayout(3,1));
      intFrame.add(btnTeste);
      intFrame.add(btnTeste2);
      intFrame.add(btnTeste3);
      
      btnTeste.addActionListener(this);
      btnTeste2.addActionListener(this);
      btnTeste3.addActionListener(this);
      intFrame.setBounds(20,20,500,300);
      intFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
      intFrame.setVisible(true);
      
      Projeto projeto = new Projeto();
      projeto.this.add(intFrame);
      
   }
   
   public void actionPerformed(ActionEvent e){
   
   }
}

Sendo que, no seu projeto original, voce digitou

Projeto projeto = new Projeto();
Projeto.this.add(intFrame);

Fique atento! “Projeto” é diferente de “projeto”. Olha o case sensitive!
Ah, e sobre interface gráfica, Swing, criar é simples. Trabalhar com ela é complicado. Se quiser saber um pouco mais sobre Swing, tem uma apostila bacana, chamada Loucademia de Java.
É antiga, mas ainda é uma das melhores, pra mim.

E quando acabar isso, busque por JavaFX

Muito obrigado pelos esclarecimentos, tá me ajudando muito mesmo mano.
Mais uma coisa, ainda quando eu instancio a classe eu tenho problema, é o seguinte:

eu copiei e colei o código que voce colocou ai em cima, e nessa parte aqui ele não ta achando o Projeto projeto.

  Projeto projeto = new Projeto();
  projeto.this.add(intFrame);

IntFrame1.java:31: error: cannot find symbol
      projeto.this.add(intFrame);
      ^

Quando eu tirei o this ai no meio, ele compilou!

Eu também to tendo problema na hora de instanciar na classe principal, eu coloco

IntFrame1 intframe1 = new IntFrame1();

e ele da erro:

Projeto.java:64: error: cannot find symbol
         IntFrame1 intframe1 = new IntFrame1();
         ^

Poderia ser o erro na hora de instanciar porque a classe IntFrame1 não tem construtor???

Tenta…

projeto.this.getContentPane().add(intFrame);

E o Projeto projeto = new Projeto(); coloca antes de iniciar o metodo
E coloca o JInternalFrame como public ou não coloca nada

Tá dando o mesmo erro na hora de compilar o

projeto.this.getContentPane().add(intFrame);

e ainda não ta dando pra instanciar, que negócio complicado!

Cara, ce podia usar o JFrame que ce instanciou na primeira classe. Vou fazer um teste aqui e vou mandar pra ti o que fiz. Tá usando Eclipse ou NetBeans?
Se quiser, adiciona logo no Skype e vamo resolver essa treta .-.
Skype: chaybe.lucas

To usando JGrasp mano, o professor disse que não era pra fazer no Eclipse ou Netbeans porque dava pra fazer tudo pelo Build, e ele não queria, aquele infeliz.

se quiser meu e-mail, ta aqui: kaiolf11@gmail.com

o que precisar eu te mando, to precisando mesmo de ajuda pra entender isso!!!

É, verdade.
Eclipse e NetBeans facilitam muito. Eu uso o bloco de notas às vezes, pra não perder o costume hue

Problema resolvido, com a ajuda do @Chaybelucas

Codigo funcionando:

`import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Projeto extends JFrame implements ActionListener
{
   private JTextArea txtResultado;
   public JFrame JFrame2;
   public JButton btnPorcentagemSistema, btnCadastroPorcentagem, btnSistemasDasCidades, btnCreditosCriacao, btnRepresas, btnFecharPrograma, btnPorcentagem, btn30D, btnDias;
   public int x;
   public Projeto()
   {
      super("Manancias");
      
      txtResultado = new JTextArea(20,31);
      txtResultado.setEditable(false);
      txtResultado.setLineWrap(true);
      btnPorcentagemSistema = new JButton("Porcentagem do Sistema");
      btnCadastroPorcentagem = new JButton("Cadastro da Porcentagem");
      btnSistemasDasCidades = new JButton("Sistema das cidades");
      btnCreditosCriacao = new JButton("Creditos da Criacao");
      btnRepresas = new JButton("Represas");
      btnFecharPrograma = new JButton("Fechar o Programa");
      
      JScrollPane jScroll= new JScrollPane(txtResultado);
      jScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
   
      Container border = getContentPane();
      
      
      
      border.setLayout(new BorderLayout());
      JPanel grid = new JPanel();
      grid.setLayout(new GridLayout(3,3));
        
      border.add(txtResultado, BorderLayout.WEST);
      border.add(grid, BorderLayout.EAST);
      grid.add(btnPorcentagemSistema);
      grid.add(btnCadastroPorcentagem);
      grid.add(btnSistemasDasCidades); 
      grid.add(btnCreditosCriacao); 
      grid.add(btnRepresas); 
      grid.add(btnFecharPrograma);
      
      btnPorcentagemSistema.addActionListener(this);
      btnCadastroPorcentagem.addActionListener(this); 
      btnSistemasDasCidades.addActionListener(this); 
      btnCreditosCriacao.addActionListener(this); 
      btnRepresas.addActionListener(this); 
      btnFecharPrograma.addActionListener(this);
      
      
      setResizable(false);
      setSize(710, 400);
      setLocationRelativeTo(null);
      setVisible(true);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
   public void actionPerformed(ActionEvent e)
   {
   // adicionei isso primeiro para criar primeiro
      if(e.getSource() == btnPorcentagem)
      {
               
         JOptionPane.showInputDialog("Informe a porcentagem");
      }
      else if(e.getSource() ==btn30D)
      {
         JOptionPane.showMessageDialog(null, "");
      }
      else if(e.getSource()== btnDias)
      {
         JOptionPane.showInputDialog("Informe os dias que voce deseja");
      }
   
   
      if(e.getSource() == btnPorcentagemSistema)
      { 
         x = Integer.parseInt(JOptionPane.showInputDialog("Informe o Sistema Desejado: \n 1)Cantareira\n 2)Alto do Tiete \n 3)Guarapiranga \n 4)Rio Grande \n 5)Rio Claro \n 6)Alto Cotia \n 7)Baixa Cotia \n 8)Rib . Estiva  ")); 
         if(x == 1)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
         
         // e aqui criei o action Listener
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
                 
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         
         
         }
         if(x == 2)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         
         }
         if(x == 3)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         
         }
         if(x == 4)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         
         }
         if(x == 5)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         
         }
         if(x == 6)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         
         }
         if(x == 7)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         
         }
         if(x == 8)
         {
         
            btnPorcentagem = new JButton("Porcentagem");
            btn30D = new JButton("30 Dias");
            btnDias = new JButton("Dias");
            Container frame2 = getContentPane();
            frame2 = new JFrame();//Esse era o codigo que faltava
            frame2.setLayout(new GridLayout(3,1));
         
            btnPorcentagem.addActionListener(this);
            btn30D.addActionListener(this);
            btnDias.addActionListener(this);
         
            frame2.add(btnPorcentagem);
            frame2.add(btn30D);
            frame2.add(btnDias);
         
            frame2.setVisible(true);
            frame2.setSize(400,300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         }
         if(x==0 || x>8){
            JOptionPane.showMessageDialog(null,"Numero invalido");
         }
      }
      
      if(e.getSource() == btnCadastroPorcentagem)
      {
         int senha;
         
         do
         {
            senha = Integer.parseInt(JOptionPane.showInputDialog("Informe a senha de acesso"));
         }while(senha != 1234);
         
         JOptionPane.showInputDialog("Informe a porcentagem do Sistema do dia");
         
      }
      else if(e.getSource() == btnSistemasDasCidades)
      {
         JOptionPane.showInputDialog("Informe a cidade desejada");
         
      }
      else if(e.getSource() == btnCreditosCriacao)
      {
         txtResultado.setText("Programa desenvolvido por: " + "\n" + "Abdelkarim" + "\n" + "Camila" + "\n" + "Daniel" + "\n" + "Francisco" + "\n" + "Gabriel" + "\n" + "Kaio" + "\n" + "Yuri");
         
      }
      else if(e.getSource() == btnRepresas)
      {
         JOptionPane.showInputDialog("Informe a represa desejada");
         
      }
      else if(e.getSource() == btnFecharPrograma)
      {
         System.exit(0);
      }
      
   }
   public static void main(String[] args)
   {
      new Projeto();
   }
}

Cara tenta cria um action performed mandando para a janela que vc deseja
tipo assim
private void menuCadastroActionPerformed(java.awt.event.ActionEvent evt) {
Cadastro cad = new Cadastro();
dpFundo.add(cad);
cad.setVisible(true);

}            

Espero ter ajudado

Sério que voce manda isso um ano depois e “espera ter ajudado”? :grin: