Dúvida em código java

16 respostas
P

Os arquivos em java são estes:

Teste.java
package teste;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Teste extends JFrame {
    private JTextField tfLogin;
    private JLabel lbSenha;
    private JLabel lbLogin;
    private JButton btLogar;
    private JButton btCancelar;
    private JPasswordField pfSenha;
    private static Teste frame;
       
    public Teste() {
        inicializarComponentes();
        definirEventos();
    }

    private void inicializarComponentes() {
       setTitle("Principal");
       setBounds(0,0,250,200);
       setLayout(null);
       tfLogin = new JTextField(5);
       pfSenha = new JPasswordField(5);
       lbSenha = new JLabel("Senha:");
       lbLogin = new JLabel("Login:");
       btLogar = new JButton("Logar");
       btCancelar = new JButton("Cancelar");
       tfLogin.setBounds(100, 30, 120, 25);
       lbLogin.setBounds(30, 30, 80, 25);
       lbSenha.setBounds(30, 75, 80 , 25);
       pfSenha.setBounds(100, 75, 120, 25);
       btLogar.setBounds(20, 120, 100, 25);
       btCancelar.setBounds(125, 120, 100, 25);
       add(tfLogin);
       add(lbSenha);
       add(lbLogin);
       add(btLogar);
       add(btCancelar);
       add(pfSenha);
    }

    private void definirEventos() {
        btLogar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String senha = String.valueOf(pfSenha.getPassword());
                if(tfLogin.getText().equals("teste") && senha.equals("teste")){
                    frame.setVisible(false);
                    Principal.abrir();
                }
                else{
                    JOptionPane.showMessageDialog(null, "Login ou senha incorretoas!");
                }
            }
        });
        
        btCancelar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                frame = new Teste();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
                frame.setLocation((tela.width - frame.getSize().width) / 2,
                        (tela.height - frame.getSize().height) / 2);
                frame.setVisible(true);        
            }
        });
    }
}
Principal.java
package teste;      
import java.awt.*;    
import java.awt.event.*;    
import javax.swing.*;      
public class Principal extends JFrame{    
    private Container contentPane;    
    private JMenuBar mnBarra;    
    private JMenu mnArquivo, mnExemplos;    
    private JMenuItem miSair, miBotao, miJanela2;    
        
    public Principal() {    
        inicialixarComponentes();    
        definirEventos();    
    }    
        
    private void inicialixarComponentes() {    
        setTitle("Menu Principal");    
        setBounds(0, 0, 800, 600);    
        contentPane = getContentPane();
        mnBarra = new JMenuBar();    
        mnArquivo =  new JMenu("Arquivo");    
        mnArquivo.setMnemonic('A');
        mnExemplos = new JMenu("Teste");    
        mnExemplos.setMnemonic('E');   
        miSair = new JMenuItem("Sair", new ImageIcon("sair.png"));
        miSair.setAccelerator(KeyStroke.getKeyStroke(    
                KeyEvent.VK_S, ActionEvent.ALT_MASK));    
        miBotao = new JMenuItem("Janela");
        miJanela2 = new JMenuItem("Janela2");
        mnExemplos.add(miBotao);   
        mnExemplos.add(miJanela2); 
        mnArquivo.add(miSair);       
        mnBarra.add(mnArquivo);    
        mnBarra.add(mnExemplos);    
        setJMenuBar(mnBarra);    
    }    
        
    private void definirEventos() {    
        miSair.addActionListener(new ActionListener() {    
            public void actionPerformed(ActionEvent e) {    
                System.exit(0);    
            }    
        });    
        
        miBotao.addActionListener(new ActionListener() {    
            public void actionPerformed(ActionEvent e) { 
            Janela botao = new Janela();
                contentPane.removeAll();
                contentPane.add(botao);
                contentPane.validate();
            }    
        });  
        
        miJanela2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Janela2 Janela2 = new Janela2();
                contentPane.removeAll();
                contentPane.add(Janela2);
                contentPane.validate();
            }
        });  
    }    
        
        public static void abrir() {    
        Principal frame = new Principal();    
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
        Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();    
        frame.setLocation((tela.width - frame.getSize().width) / 2,    
                (tela.height - frame.getSize().height) / 2);    
        frame.setVisible(true);      
    }    
}

Janela.java

package teste;
import java.awt.*;
import javax.swing.JInternalFrame;
public class Janela extends JInternalFrame{
    
    public Janela() {
        inicializarComponentes();
    }
    
    private void inicializarComponentes() {
        setTitle("Usando Frame Interno");
        setSize(300,100);
        setResizable(true);
        setClosable(true);
        setMaximizable(true);
        setIconifiable(true);
        setBackground(Color.orange);
        setVisible(true);
    } 
}
Janela2.java
package teste;
import java.awt.event.*;
import javax.swing.*;
public class Janela2 extends JPanel {
    private JLabel lbSexo;
    private JButton btVerificar;
    private JRadioButton rbMasculino, rbFeminino;
    private ButtonGroup buttonGroup;
    
    public Janela2() {
        inicializarComponentes();
        definirEventos();
    }
    
    private void inicializarComponentes() {
        setLayout(null);
        btVerificar = new JButton("Verificar");
        rbMasculino = new JRadioButton("Masculino");
        lbSexo = new JLabel("Selecione o sexo:");
        rbFeminino = new JRadioButton("Feminino");
        buttonGroup = new ButtonGroup();
        buttonGroup.add(rbMasculino);
        buttonGroup.add(rbFeminino);
        btVerificar.setBounds(55, 105, 100, 20);
        rbMasculino.setBounds(55, 45, 100, 25);
        lbSexo.setBounds(55, 10, 105, 30);
        rbFeminino.setBounds(55, 70, 100, 25);
        rbMasculino.setSelected(true);
        add(btVerificar);
        add(rbMasculino);
        add(lbSexo);
        add(rbFeminino);
    }
    
    private void definirEventos() {
       btVerificar.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent arg0) {
               if (rbMasculino.isSelected()) {
                   JOptionPane.showMessageDialog(null, "Masculino selecionado");
               } else if (rbFeminino.isSelected()) {
                   JOptionPane.showMessageDialog(null, "Feminino selecionado");
               }
           }
       });
    }
}

Então quando eu executo mostra a tela de login, depois abre uma tela se estiver certo o login e senha. No menu aperto em Teste e em janela e janela2. Tudo funciona menos o maximizar e minimizar do Janela.

Então para resolver esse problema fui em Principal.java e na linha 6 substitui Container por JDesktopPane e retirei a linha 19 e adicionei:
contentPane = new JDesktopPane();
setContentPane(contentPane);
...

Então testo e funciona o maximizar e minimizar do Janela, mas não funciona mais Janela2 e o Principal.java fica com uma tela em branco.

Como resolver isso?

16 Respostas

P

Alguém???

P

Estou usando o Netbeans.

P

Alguém ao menos pode testar esse código e ver o problema?

P

Ninguém???

ViniGodoy

Eu resolveria da seguinte forma:
a) A tela de nome e senha eu deixaria num JDialog modal. Assim o usuário também não consegue clicar fora da janela, e alternar.
b) Dentro da janela principal do aplicativo há duas abordagens possíveis:
b.1) Usar um JTabbedPane e painéis para suas janelas.
b.2) Usar JInternalFrames sobre um JDesktopPane.

O que não dá para fazer é inventar usos de componentes que não existem. O JDesktopPane só funciona com o JInternalFrame, não com JPanels. Ao mesmo tempo, você não deve colocar JInternalFrames diretamente sobre outro painés que não sejam JDesktopPanes.

P

ViniGodoy:
Eu resolveria da seguinte forma:
a) A tela de nome e senha eu deixaria num JDialog modal. Assim o usuário também não consegue clicar fora da janela, e alternar.
b) Dentro da janela principal do aplicativo há duas abordagens possíveis:
b.1) Usar um JTabbedPane e painéis para suas janelas.
b.2) Usar JInternalFrames sobre um JDesktopPane.

O que não dá para fazer é inventar usos de componentes que não existem. O JDesktopPane só funciona com o JInternalFrame, não com JPanels. Ao mesmo tempo, você não deve colocar JInternalFrames diretamente sobre outro painés que não sejam JDesktopPanes.

Desculpa mas sou novato, não entendi direito. E em Teste.java esta tudo certo, não vejo motivo para alterar.

ViniGodoy

Se tudo funcionasse, não haveria dúvida, certo? Como você mesmo falou, o maximizar e o minimizar da janela não funcionam, justamente porque o JInternalFrame só funciona corretamente no interior de um JDesktopPane.

P

Então quando faço isso:
Vou em Principal.java e na linha 6 substitui Container por JDesktopPane e retiro a linha 19 e adiciono:

contentPane = new JDesktopPane(); setContentPane(contentPane);

… janela.java passa a funcionar, só que janela2.java passa a não funcionar e Principal.java fica em branco.

Entende?

P

Você falou: “O JDesktopPane só funciona com o JInternalFrame, não com JPanels.”. Por isso janela2.java não funciona?

P

Não entendi como resolver isso.

ViniGodoy

Sim, é por isso.

Para resolver, você precisa fazer uma das coisas que eu falei, ou seja, reorganizar sua interface com outros componentes (JDialogs, JTabbedPanes ou com um uso correto do JDesktopPane). O que você não pode fazer, é usar componentes que não são compatíveis entre si.

guj1

Eu não manjo de Swing mas acho que o que você precisa é setar as operações para os botões de minimizar e maximizar.

Talvez isso ajude:

http://stackoverflow.com/questions/479523/java-swing-maximize-window

P

Sim, é por isso.

Para resolver, você precisa fazer uma das coisas que eu falei, ou seja, reorganizar sua interface com outros componentes (JDialogs, JTabbedPanes ou com um uso correto do JDesktopPane). O que você não pode fazer, é usar componentes que não são compatíveis entre si.

Pode me explicar como fazer usando códigos?

L

Sim, é por isso.

Para resolver, você precisa fazer uma das coisas que eu falei, ou seja, reorganizar sua interface com outros componentes (JDialogs, JTabbedPanes ou com um uso correto do JDesktopPane). O que você não pode fazer, é usar componentes que não são compatíveis entre si.

Pode me explicar como fazer usando códigos?

Cara a sua janela2 ao invés de herdar de um JPanel deve herdar de um JInternalFrame igual a sua janela e na sua classe Principal você deve alterar a linha 6 conforme você fez no seu primeiro post.

na janela2 você terá que fazer uma organização no seu layout pois quando você alterar para JInternalFrame os componentes irão ficar desorganizados.

P
lucas93lange:
Pixels15:
ViniGodoy:
Pixels15:
Você falou: "O JDesktopPane só funciona com o JInternalFrame, não com JPanels.". Por isso janela2.java não funciona?

Sim, é por isso.

Para resolver, você precisa fazer uma das coisas que eu falei, ou seja, reorganizar sua interface com outros componentes (JDialogs, JTabbedPanes ou com um uso correto do JDesktopPane). O que você não pode fazer, é usar componentes que não são compatíveis entre si.

Pode me explicar como fazer usando códigos?

Cara a sua janela2 ao invés de herdar de um JPanel deve herdar de um JInternalFrame igual a sua janela e na sua classe Principal você deve alterar a linha 6 conforme você fez no seu primeiro post.

na janela2 você terá que fazer uma organização no seu layout pois quando você alterar para JInternalFrame os componentes irão ficar desorganizados.

Fiz o que falou...

janela2.java
package teste;
import java.awt.event.*;
import javax.swing.*;
public class Janela2 extends JInternalFrame {
    private JLabel lbSexo;
    private JButton btVerificar;
    private JRadioButton rbMasculino, rbFeminino;
    private ButtonGroup buttonGroup;
    
    public Janela2() {
        inicializarComponentes();
        definirEventos();
    }
    
    private void inicializarComponentes() {
        setLayout(null);
        btVerificar = new JButton("Verificar");
        rbMasculino = new JRadioButton("Masculino");
        lbSexo = new JLabel("Selecione o sexo:");
        rbFeminino = new JRadioButton("Feminino");
        buttonGroup = new ButtonGroup();
        buttonGroup.add(rbMasculino);
        buttonGroup.add(rbFeminino);
        btVerificar.setBounds(55, 105, 100, 20);
        rbMasculino.setBounds(55, 45, 100, 25);
        lbSexo.setBounds(55, 10, 105, 30);
        rbFeminino.setBounds(55, 70, 100, 25);
        rbMasculino.setSelected(true);
        add(btVerificar);
        add(rbMasculino);
        add(lbSexo);
        add(rbFeminino);
    }
    
    private void definirEventos() {
       btVerificar.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent arg0) {
               if (rbMasculino.isSelected()) {
                   JOptionPane.showMessageDialog(null, "Masculino selecionado");
               } else if (rbFeminino.isSelected()) {
                   JOptionPane.showMessageDialog(null, "Feminino selecionado");
               }
           }
       });
    }
}

Mas não deu certo esta a tela branca e so abre janela.java

P

Alguém???

Criado 4 de junho de 2015
Ultima resposta 26 de jun. de 2015
Respostas 16
Participantes 4