Tela de Cadastro Java

Boa tarde a todos, Preciso incrementar nesta tela, numero, cidade, Email, estado, sexo masculino ou feminino, já tentei fazer as alterações mas não estou conseguindo encaixar a text Field e a Label no lugar correto, desde já agradeço pelas dicas, eis o código abaixo.

[code]import java.awt.FlowLayout;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Cadastro extends JFrame implements ActionListener{

JLabel lblNome, lblEndereco, lblEmail, lblHistorico;
JTextArea ta1, ta2;
JTextField tNome, tEndereco, tEmail;
JButton b1, b2;

public static void main(String args[]){

JFrame janela = new Cadastro();
janela.setUndecorated(true);
janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setVisible(true);
}

Cadastro(){

setBounds(300, 150, 480, 380);
setTitle(“Manipulando informações”);
getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));

lblNome = new JLabel(“Nome”);
lblHistorico = new JLabel(“Historico”);
lblEndereco = new JLabel(“Endereco”);
tNome = new JTextField(40);
tEmail = new JTextField(40);
tEndereco = new JTextField(40);

tNome.addActionListener(this);
tEndereco.addActionListener(this);
tEmail.addActionListener(this);
b1 = new JButton(“Copia Tudo”);
b1.addActionListener(this);

b2 = new JButton(“Copia Seleção”);
b2.addActionListener(this);

ta1 = new JTextArea("***Detalhes históricos:***\n", 5, 40);
ta2 = new JTextArea(5, 40);

JScrollPane painel1 = new JScrollPane(ta1);
JScrollPane painel2 = new JScrollPane(ta2);

getContentPane().add(painel1); getContentPane().add(lblNome);
getContentPane().add(painel1); getContentPane().add(tNome);
getContentPane().add(painel1); getContentPane().add(lblEndereco);
getContentPane().add(painel1); getContentPane().add(tEndereco);
getContentPane().add(painel1); getContentPane().add(lblHistorico);
getContentPane().add(painel1); getContentPane().add(tEmail);
getContentPane().add(painel1); getContentPane().add(tEmail);
getContentPane().add(b1); getContentPane().add(b2);
getContentPane().add(painel2);

}

public void actionPerformed(ActionEvent e){

if (e.getSource()==tNome){
ta1.append(tNome.getText());
tNome.setText("");
}

if(e.getSource()==b1)
ta2.setText(ta1.getText() + “\n” + tNome.getText() + tEndereco.getText());

if (e.getSource() == b2)
ta2.setText(ta1.getSelectedText()+ “\n” + tNome.getSelectedText());
}

}[/code]

Procure informções sobre o MigLayout

eae …

pq não utliza o gerenciador de Layout do netBeans…??

falow

Sem dúvida o net bens é mais fácil, mas confesso em determinado ponto eu não consigo entender o código, e preciso aprender a incrementar manualmente pelo eclipse.

isso e verdade…

o netBeans cria muito lixo…

mas para um desenvolvimento rapido…não tem melhor

falow

Preciso de dicas pois eu já tentei incrementar e a tela não fica no padrão desejado, Valeu!!!

[quote=mcmarcelosp]Boa tarde a todos, Preciso incrementar nesta tela, numero, cidade, Email, estado, sexo masculino ou feminino, já tentei fazer as alterações mas não estou conseguindo encaixar a text Field e a Label no lugar correto, desde já agradeço pelas dicas, eis o código abaixo.
[/quote]

Se estiver usando o Eclipse, instale o plugin WindowBuilder e redesenhe sua tela, de preferência usando o layout MigLayout.

(Não use o GroupLayout porque ele usa o gerenciador de layout do NetBeans, que gera telas difíceis de manter, de entender e de deixar “do jeito que você quer”. Embora seja uma opção do WindowBuilder, evite usar o GroupLayout. Ter de mandar um jar pequeno do MigLayout junto com a sua aplicação mais que compensa o fato que o GroupLayout está no Java desde a versão 1.6.)

Como ela está muito “crua” acho que você não vai perder muita coisa do seu código.

A propósito, poderia criar uma figura (mesmo que seja para você desenhar com o MS Paint) do que você quer dispor na sua tela? Isso ajuda na hora de você usar o WindowBuilder.

Evite fazer sua classe JFrame implementar ActionListener. Isso gera código muito amarrado (você tem um método linguição que pega todos os eventos de botões, menus etc. em um método só.) O correto é sempre criar classes anônimas, o código é meio esquisito mas você se acostuma logo.

Vou fazer um teste de acordo com as orientações de vocês, um grande abraço a todos!!!

O código abaixo foi gerado com o WindowBuilder, veja que ele fica bem bonitinho e fácil de entender. A tela deve ficar mais ou menos como está no attachement:

package guj;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

import net.miginfocom.swing.MigLayout;

public class ExemploTelaCadastro extends JFrame {

    private JPanel contentPane;
    private JLabel lblNome;
    private JTextField txtNome;
    private JLabel lblEndereo;
    private JTextField txtEndereco;
    private JLabel lblHistrico;
    private JTextField txtHistorico;
    private JPanel panel;
    private JScrollPane scrollPaneEsquerda;
    private JScrollPane scrollPaneDireita;
    private JPanel panelBotoes;
    private JButton btnCopiarTudo;
    private JButton btnCopiarSelecionado;
    private JTextArea textAreaEsquerda;
    private JTextArea textAreaDireita;

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

    /**
     * Create the frame.
     */
    public ExemploTelaCadastro() {
        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 MigLayout("", "[][grow]", "[][][][grow]"));
        contentPane.add(getLblNome(), "cell 0 0,alignx trailing");
        contentPane.add(getTxtNome(), "cell 1 0,growx");
        contentPane.add(getLblHistrico(), "cell 0 1,alignx right");
        contentPane.add(getTxtHistorico(), "cell 1 1,growx");
        contentPane.add(getLblEndereo(), "cell 0 2,alignx trailing");
        contentPane.add(getTxtEndereco(), "cell 1 2,growx");
        contentPane.add(getPanel(), "cell 0 3 2 1,grow");
    }

    private JLabel getLblNome() {
        if (lblNome == null) {
            lblNome = new JLabel("Nome");
        }
        return lblNome;
    }

    private JTextField getTxtNome() {
        if (txtNome == null) {
            txtNome = new JTextField();
            txtNome.setColumns(10);
        }
        return txtNome;
    }

    private JLabel getLblEndereo() {
        if (lblEndereo == null) {
            lblEndereo = new JLabel("Endere\u00E7o");
        }
        return lblEndereo;
    }

    private JTextField getTxtEndereco() {
        if (txtEndereco == null) {
            txtEndereco = new JTextField();
            txtEndereco.setColumns(10);
        }
        return txtEndereco;
    }

    private JLabel getLblHistrico() {
        if (lblHistrico == null) {
            lblHistrico = new JLabel("Hist\u00F3rico");
        }
        return lblHistrico;
    }

    private JTextField getTxtHistorico() {
        if (txtHistorico == null) {
            txtHistorico = new JTextField();
            txtHistorico.setColumns(10);
        }
        return txtHistorico;
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.setBorder(new TitledBorder(null, "Detalhes Hist\u00F3ricos", TitledBorder.LEADING, TitledBorder.TOP, null, null));
            panel.setLayout(new MigLayout("", "[grow][][grow]", "[grow]"));
            panel.add(getScrollPaneEsquerda(), "cell 0 0,grow");
            panel.add(getPanelBotoes(), "cell 1 0,alignx center,aligny center");
            panel.add(getScrollPaneDireita(), "cell 2 0,grow");
        }
        return panel;
    }

    private JScrollPane getScrollPaneEsquerda() {
        if (scrollPaneEsquerda == null) {
            scrollPaneEsquerda = new JScrollPane();
            scrollPaneEsquerda.setViewportView(getTextAreaEsquerda());
        }
        return scrollPaneEsquerda;
    }

    private JScrollPane getScrollPaneDireita() {
        if (scrollPaneDireita == null) {
            scrollPaneDireita = new JScrollPane();
            scrollPaneDireita.setViewportView(getTextAreaDireita());
        }
        return scrollPaneDireita;
    }

    private JPanel getPanelBotoes() {
        if (panelBotoes == null) {
            panelBotoes = new JPanel();
            panelBotoes.setLayout(new BoxLayout(panelBotoes, BoxLayout.Y_AXIS));
            panelBotoes.add(getBtnCopiarTudo());
            panelBotoes.add(getBtnCopiarSelecionado());
        }
        return panelBotoes;
    }

    private JButton getBtnCopiarTudo() {
        if (btnCopiarTudo == null) {
            btnCopiarTudo = new JButton("Copiar Tudo");
            btnCopiarTudo.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showMessageDialog(ExemploTelaCadastro.this, "Voce apertou o botao Copiar Tudo");
                }
            });
        }
        return btnCopiarTudo;
    }

    private JButton getBtnCopiarSelecionado() {
        if (btnCopiarSelecionado == null) {
            btnCopiarSelecionado = new JButton("Copiar Selecionado");
            btnCopiarSelecionado.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JOptionPane.showMessageDialog(ExemploTelaCadastro.this, "Voce apertou o botao Copiar Selecionado");
                }
            });
        }
        return btnCopiarSelecionado;
    }

    private JTextArea getTextAreaEsquerda() {
        if (textAreaEsquerda == null) {
            textAreaEsquerda = new JTextArea();
        }
        return textAreaEsquerda;
    }

    private JTextArea getTextAreaDireita() {
        if (textAreaDireita == null) {
            textAreaDireita = new JTextArea();
        }
        return textAreaDireita;
    }
}


Aproveitando o tópico, uma dúvida:
Tem como fazer um tela via design[Formulário JFrame] e implementar herança nela, como se faz nas classes?
Pensando em fazer um programinha e utilizar herança, o jeito é organizar os componentes via código msm? =X

  • No netbeans.

Tem gente que tenta reaproveitar código de interface via herança, mas os editores gráficos (como o WindowBuilder ou o NetBeans) não gostam muito de herança. (tradução: acho que não funciona :frowning: )

Em vez disso, crie componentes reutilizáveis, como caixas de entrada de CPF, de moeda, de datas etc.

Você pode criar um diálogo customizável em vez de ficar fazendo “subclassing” desse diálogo. Por exemplo, você poderia ajustar o título, que dados ele entra, etc.

Estou começando em Java e na verdade minha preocupação é que prefiro fazer o layout (drag and drop) do que fazê-lo via código, mas como terá formulários parecidos o conceito de herança parece viável.
Nessas condições seria melhor abandonar a herança então?

Obrigada!