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”?