domingo, 23 de abril de 2017

Java Desktop, Cadastro CRUD - 5: JFrame

Eclipse
Nesta parte elaboramos a janela do sistema, com a classe JFrame.
Continue o projeto criando uma nova classe, FormCliente no pacote view. Lembrando que é necessário configurar a IDE com o windowbuilder, como visto na Parte 1 desta série. Há duas formas de criar a classe: 

1-CRIANDO CLASSE JFRAME SWING DESIGNER

A primeira forma é criando direto a classe estendendo JFrame. Faça o caminho Menu File - New - Other (como exemplo na Parte 2) e digite JFrame no campo onde está escrito type filter text selecionado em azul (caso não apareça na lista):


Eclipse
1-Nova Classe - Eclipse - type filter text

Eclipse
2-Nova Classe - Eclipse - Swing Designer JFrame
Após clicar em Next e digitar o nome para a classe, o código deverá ficar assim:
1 package br.com.cliente.view;
2 import java.awt.BorderLayout;
3 import java.awt.EventQueue;
4 import javax.swing.JFrame;
5 import javax.swing.JPanel;
6 import javax.swing.border.EmptyBorder;
7 
8 public class FormCliente extends JFrame {
9  private JPanel contentPane;
10 /**  * Launch the application.
11
12   */
13 public static void main(String[] args) {  EventQueue.invokeLater(new Runnable() {   public void run() {
14    try {
15     FormClientes frame = new FormClientes();
16     frame.setVisible(true);
17    } catch (Exception e) {
18     e.printStackTrace();
19    }
20   }
21  });
22 }
23 /**
24  * Create the frame.
25  */
26 public FormClientes() {
27  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
28  setBounds(100, 100, 450, 300);
29  contentPane = new JPanel();
30  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
31  contentPane.setLayout(new BorderLayout(0, 0));
32  setContentPane(contentPane);
33
34 }
35 }
36
Note que desta forma o Eclipse automaticamente cria o método main. Porém, o método main já está na classe Principal, criada na Parte 2. Para manter o padrão, exclua as linhas do método, deixando código como a seguir:
1 package br.com.cliente.view;
2 import java.awt.BorderLayout;
3 import java.awt.EventQueue;
4 import javax.swing.JFrame;
5 import javax.swing.JPanel;
6 import javax.swing.border.EmptyBorder;
7 
8 public class FormCliente extends JFrame {
9  private JPanel contentPane;
10  public FormClientes() {
11  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12  setBounds(100, 100, 450, 300);
13  contentPane = new JPanel();
14  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
15  contentPane.setLayout(new BorderLayout(0, 0));
16  setContentPane(contentPane);
17 }
18 }
No canto inferior esquerdo, clique em Design para alternar para a ferramenta de desenho de janelas. Com um duplo clique na aba da classe FormCliente (como indicado pela seta na imagem abaixo) você maximiza a janela, melhorando a visualização.

Eclipse
3-Interface de Design JFrame - Eclipse

2-CRIANDO CLASSE NORMAL + EXTENDS JFRAME

A segunda forma é criar uma classe normal e depois estender o JFrame (lembrando de usar o recurso do Eclipse - CTRL+Espaço), correspondendo ao código seguinte:
1 package br.com.cliente.view;
2 import javax.swing.JFrame;
3
4 public class FormCliente extends JFrame {
5
6 }
Para ter acesso ao editor de janelas windowbuilder, clique com o botão direito do mouse na classe FormCliente na coluna Package Explorer, opção Open With e WindowBuilder Editor:


Eclipse WindowBuilder Editor
4-Eclipse - Abrindo WindowBuilder
A aba Design aparecerá no canto inferior esquerdo, para alternar entre o código fonte (source) e o editor:


Eclipse WindowBuilder
5-Eclipse - Aba Design
Recordando a imagem do formulário, na Parte 1 desta série, deixo duas opções para compor a janela: usando o editor, onde você pode dispor os campos e botões em outra ordem, se desejar; ou simplesmente copiar e colar o código a seguir que corresponde ao formulário completo, incluindo os campos formatados para CEP, Telefone, CNPJ etc. Além do código, é preciso adicionar uma pasta de imagens, onde estão os arquivos de imagem dos ícones dos botões - salvar, editar, pesquisar, limpar e excluir. Baixe a pasta neste link e coloque-a na pasta do projeto (por padrão, workspace, dentro da pasta de usuário do Windows - C:\User\NomeDoUsuario\workspace):
1   package br.com.cliente.view;
2   
3   import java.awt.BorderLayout;
4   import java.awt.EventQueue;
5   
6   import javax.swing.JFrame;
7   import javax.swing.JPanel;
8   import javax.swing.border.EmptyBorder;
9   
10  import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
11  
12  import br.com.cliente.bean.Cliente;
13  import br.com.cliente.controle.ClienteBC;
14  import br.com.cliente.util.MaskCampos;
15  
16  import javax.swing.JLabel;
17  import javax.swing.JOptionPane;
18  
19  import java.awt.Font;
20  import java.text.ParseException;
21  import java.util.List;
22  
23  import javax.swing.JComboBox;
24  import javax.swing.JTextField;
25  import javax.swing.JRadioButton;
26  import javax.swing.JFormattedTextField;
27  import java.awt.Color;
28  import javax.swing.JButton;
29  import javax.swing.ButtonGroup;
30  import javax.swing.ImageIcon;
31  import java.awt.event.ActionListener;
32  import java.awt.event.ActionEvent;
33  
34  public class FormCliente extends JFrame implements ActionListener {
35  
36   private JPanel contentPane;
37   private JTextField txtNome;
38   private JTextField txtEndereco;
39   private JTextField txtMunicipio;
40   private JFormattedTextField txtCep;
41   private JFormattedTextField txtCel;
42   private JFormattedTextField txtTel;
43   private JFormattedTextField txtCnpj;
44   private JFormattedTextField txtCpf;
45   private JTextField txtID;
46   private JComboBox cbPesquisar;
47   private ButtonGroup bt = new ButtonGroup();
48   
49   private String genero;
50  
51   private JRadioButton rdbtnM;
52   private JRadioButton rdbtnF;
53   private JButton btnSalvar;
54   private JButton btnExcluir;
55   private JButton btnEditar;
56   private JButton btnPesquisar;
57   private JButton btnLimpar;
58   
59   public FormCliente() {
60    setTitle("Cadastro de Clientes");
61    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
62    setBounds(100, 100, 556, 413);
63    contentPane = new JPanel();
64    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
65    setContentPane(contentPane);
66    contentPane.setLayout(null);
67    
68    JLabel lblPesquisar = new JLabel("Pesquisar:");
69    lblPesquisar.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
70    lblPesquisar.setBounds(10, 31, 109, 14);
71    contentPane.add(lblPesquisar);
72    
73    JLabel lblNome = new JLabel("Nome/Empresa:");
74    lblNome.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
75    lblNome.setBounds(10, 79, 109, 14);
76    contentPane.add(lblNome);
77    
78    JLabel lblEndereo = new JLabel("Endere\u00E7o:");
79    lblEndereo.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
80    lblEndereo.setBounds(10, 104, 109, 14);
81    contentPane.add(lblEndereo);
82    
83    JLabel lblNewLabel = new JLabel("Munic\u00EDpio:");
84    lblNewLabel.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
85    lblNewLabel.setBounds(10, 129, 109, 14);
86    contentPane.add(lblNewLabel);
87    
88    JLabel lblCep = new JLabel("Cep:");
89    lblCep.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
90    lblCep.setBounds(10, 154, 109, 14);
91    contentPane.add(lblCep);
92    
93    JLabel lblTel = new JLabel("Tel:");
94    lblTel.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
95    lblTel.setBounds(10, 179, 109, 14);
96    contentPane.add(lblTel);
97    
98    JLabel lblCel = new JLabel("Cel:");
99    lblCel.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
100   lblCel.setBounds(10, 204, 109, 14);
101   contentPane.add(lblCel);
102   
103   JLabel lblCpf = new JLabel("Cpf:");
104   lblCpf.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
105   lblCpf.setBounds(10, 229, 109, 14);
106   contentPane.add(lblCpf);
107   
108   JLabel lblCnpj = new JLabel("Cnpj:");
109   lblCnpj.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
110   lblCnpj.setBounds(10, 254, 109, 14);
111   contentPane.add(lblCnpj);
112   
113   JLabel lblGnero = new JLabel("G\u00EAnero:");
114   lblGnero.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
115   lblGnero.setBounds(10, 279, 109, 14);
116   contentPane.add(lblGnero);
117   
118   cbPesquisar = new JComboBox();
119   cbPesquisar.setEditable(true);
120   cbPesquisar.setBounds(129, 28, 283, 20);
121   AutoCompleteDecorator.decorate(cbPesquisar);
122   contentPane.add(cbPesquisar);
123   
124   txtNome = new JTextField();
125   txtNome.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
126   txtNome.setBounds(129, 76, 283, 20);
127   contentPane.add(txtNome);
128   txtNome.setColumns(10);
129   
130   txtEndereco = new JTextField();
131   txtEndereco.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
132   txtEndereco.setBounds(129, 101, 365, 20);
133   contentPane.add(txtEndereco);
134   txtEndereco.setColumns(10);
135   
136   txtMunicipio = new JTextField();
137   txtMunicipio.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
138   txtMunicipio.setBounds(129, 126, 143, 20);
139   contentPane.add(txtMunicipio);
140   txtMunicipio.setColumns(10);
141   
142   rdbtnM = new JRadioButton("M");
143   rdbtnM.addActionListener(new ActionListener() {
144    public void actionPerformed(ActionEvent arg0) {
145     genero = "M";
146    }
147   });
148   rdbtnM.setBounds(125, 275, 45, 23);
149   contentPane.add(rdbtnM);
150   
151   rdbtnF = new JRadioButton("F");
152   rdbtnF.addActionListener(new ActionListener() {
153    public void actionPerformed(ActionEvent e) {
154     genero = "F";
155    }
156   });
157   rdbtnF.setBounds(172, 275, 109, 23);
158   contentPane.add(rdbtnF);
159   
160   bt.add(rdbtnF);
161   bt.add(rdbtnM);
162   
163   MaskCampos mc = new MaskCampos();
164   
165   try {
166    txtCep = new JFormattedTextField(mc.maskCep(txtCep));
167   } catch (ParseException e) {
168    // TODO Auto-generated catch block
169    e.printStackTrace();
170   }
171   txtCep.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
172   txtCep.setBounds(129, 151, 143, 20);
173   contentPane.add(txtCep);
174   
175   try {
176    txtTel = new JFormattedTextField(mc.maskTel(txtTel));
177   } catch (ParseException e) {
178    // TODO Auto-generated catch block
179    e.printStackTrace();
180   }
181   txtTel.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
182   txtTel.setBounds(129, 176, 143, 20);
183   contentPane.add(txtTel);
184   
185   try {
186    txtCel = new JFormattedTextField(mc.maskCel(txtCel));
187   } catch (ParseException e) {
188    // TODO Auto-generated catch block
189    e.printStackTrace();
190   }
191   txtCel.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
192   txtCel.setBounds(129, 201, 143, 20);
193   contentPane.add(txtCel);
194   
195   try {
196    txtCpf = new JFormattedTextField(mc.maskCpf(txtCpf));
197   } catch (ParseException e) {
198    // TODO Auto-generated catch block
199    e.printStackTrace();
200   }
201   txtCpf.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
202   txtCpf.setBounds(129, 226, 143, 20);
203   contentPane.add(txtCpf);
204   
205   try {
206    txtCnpj = new JFormattedTextField(mc.maskCnpj(txtCnpj));
207   } catch (ParseException e) {
208    // TODO Auto-generated catch block
209    e.printStackTrace();
210   }
211   txtCnpj.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
212   txtCnpj.setBounds(129, 251, 143, 20);
213   contentPane.add(txtCnpj);
214   
215    btnSalvar = new JButton("");
216   btnSalvar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/save.png")));
217   btnSalvar.setBounds(193, 327, 28, 23);
218   btnSalvar.addActionListener(this);
219   btnSalvar.setActionCommand("salvar");
220   contentPane.add(btnSalvar);
221   
222    btnEditar = new JButton("");
223   btnEditar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/edit.png")));
224   btnEditar.setBounds(231, 327, 28, 23);
225   btnEditar.addActionListener(this);
226   btnEditar.setActionCommand("editar");
227   contentPane.add(btnEditar);
228   
229    btnLimpar = new JButton("");
230   btnLimpar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/clean.png")));
231   btnLimpar.setBounds(269, 327, 28, 23);
232   btnLimpar.addActionListener(this);
233   btnLimpar.setActionCommand("limpar");
234   contentPane.add(btnLimpar);
235   
236    btnExcluir = new JButton("");
237   btnExcluir.setIcon(new ImageIcon(FormCliente.class.getResource("/img/delete.png")));
238   btnExcluir.setBounds(308, 327, 28, 23);
239   btnExcluir.addActionListener(this);
240   btnExcluir.setActionCommand("excluir");
241   contentPane.add(btnExcluir);
242   
243    btnPesquisar = new JButton("");
244   btnPesquisar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/search.png")));
245   btnPesquisar.setBounds(422, 22, 28, 23);
246   btnPesquisar.addActionListener(this);
247   btnPesquisar.setActionCommand("pesquisar");
248   contentPane.add(btnPesquisar);
249   
250   JLabel lblId = new JLabel("ID:");
251   lblId.setFont(new Font("Franklin Gothic Book", Font.BOLD, 12));
252   lblId.setBounds(10, 54, 46, 14);
253   contentPane.add(lblId);
254   
255   txtID = new JTextField();
256   txtID.setEditable(false);
257   txtID.setBounds(129, 51, 45, 20);
258   contentPane.add(txtID);
259   txtID.setColumns(10);
260  
261  }
Com isso, a janela estará concluída, embora não estará funcionando ainda. 

Para não sobrecarregar com muito código e estender muito esta postagem, deixo para a próxima parte a implementação dos métodos para os botões e os campos funcionarem, fazendo finalmente o CRUD no banco de dados.

Escreva nos comentários, clique em curtir, visite a página do Facebook  e compartilhe com seus amigos. Até a próxima!

Comente com o Facebook:

0 comentários:

Postar um comentário

 
Powered by Blogger