Dúvida em código java

Os arquivos em java são estes:

Teste.java

[code]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);        
        }
    });
}

}[/code]

Principal.java

[code]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);      
}    

} [/code]

Janela.java

[code]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);
} 

}

[/code]

Janela2.java

[code]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");
           }
       }
   });
}

}

[/code]

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?

Alguém???

Estou usando o Netbeans.

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

Ninguém???

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.

[quote=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.
[/quote]

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

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.

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?

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

Não entendi como resolver isso.

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.

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

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.

[/quote]

Pode me explicar como fazer usando códigos?

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.

[/quote]

Pode me explicar como fazer usando códigos?[/quote]

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.

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.

[/quote]

Pode me explicar como fazer usando códigos?[/quote]

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.[/quote]

Fiz o que falou…

janela2.java

[code]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");
           }
       }
   });
}

}[/code]

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

Alguém???