Acionar getContentPane() por evento

3 respostas
S

Boa tarde pessoal.

Quando eu crio um JTextField e quero que ele apareça no JFrame eu coloco:

getContentPane().add(txtnome);

Mas, se eu por exemplo quiser que ele apareça na tela, quando um evento ou um método for acionado?

Por exemplo, eu já tenho o JTextField definido, só não o getContentPane() dele. Eu quero clicar num botão, e fazer esse JTextField aparecer na tela.

Já tentei colocar getContentPane().add(txtnome) dentro de um evento, mas quando clico no botão que chama o evento, não aparece o JTextField.

Como posso fazer? Não quero instanciar a caixa de texo dentro do método do evento. A intenção é só fazer com que o getContentPane() funcione.

Obrigado desde já.

3 Respostas

E

Você sabe o que é “getContentPane” ou está usando a “programação mágica” (aprender alguns comandos mas não saber o que significam)?

S

Alguém tem alguma sugestão? Devo usar o setVisible()?

E

Rode o exemplo abaixo.

package guj;

import java.awt.BorderLayout;

public class TesteJTextFieldEscondido extends JFrame {

    private JPanel contentPane;
    private JPanel pnlBotoes;
    private JButton btnMostrar;
    private JButton btnEsconder;
    private JPanel pnlTextFields;
    private JTextField txtCampo1;
    private JTextField txtCampo2;
    private JTextField txtCampo3;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TesteJTextFieldEscondido frame = new TesteJTextFieldEscondido();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TesteJTextFieldEscondido() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));
        contentPane.add(getPnlBotoes(), BorderLayout.SOUTH);
        contentPane.add(getPnlTextFields(), BorderLayout.CENTER);
    }

    private JPanel getPnlBotoes() {
        if (pnlBotoes == null) {
            pnlBotoes = new JPanel();
            pnlBotoes.add(getBtnMostrar());
            pnlBotoes.add(getBtnEsconder());
        }
        return pnlBotoes;
    }

    private JButton getBtnMostrar() {
        if (btnMostrar == null) {
            btnMostrar = new JButton("Mostrar");
            btnMostrar.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    txtCampo3.setVisible(true);
                    pnlTextFields.validate();
                }
            });
        }
        return btnMostrar;
    }

    private JButton getBtnEsconder() {
        if (btnEsconder == null) {
            btnEsconder = new JButton("Esconder");
            btnEsconder.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    txtCampo3.setVisible(false);
                    pnlTextFields.validate();
                }
            });
        }
        return btnEsconder;
    }

    private JPanel getPnlTextFields() {
        if (pnlTextFields == null) {
            pnlTextFields = new JPanel();
            pnlTextFields.setLayout(new BoxLayout(pnlTextFields, BoxLayout.Y_AXIS));
            pnlTextFields.add(getTxtCampo1());
            pnlTextFields.add(getTxtCampo2());
            pnlTextFields.add(getTxtCampo3());
        }
        return pnlTextFields;
    }

    private JTextField getTxtCampo1() {
        if (txtCampo1 == null) {
            txtCampo1 = new JTextField();
            txtCampo1.setColumns(10);
        }
        return txtCampo1;
    }

    private JTextField getTxtCampo2() {
        if (txtCampo2 == null) {
            txtCampo2 = new JTextField();
            txtCampo2.setColumns(10);
        }
        return txtCampo2;
    }

    private JTextField getTxtCampo3() {
        if (txtCampo3 == null) {
            txtCampo3 = new JTextField();
            txtCampo3.setColumns(10);
        }
        return txtCampo3;
    }
}
Criado 12 de março de 2012
Ultima resposta 12 de mar. de 2012
Respostas 3
Participantes 2