Crie um novo frame com o nome ViewCombobox, coloque uma caixa de combinação e um botão. Na caixa de combinação, coloque o nome da variável como cbProds, e nas proprieades dele, vá em model e apague os "itens" dele, ainda lá, em código, e em parâmetros do tipo, coloque <Object>, já que passaremos um objeto pra ele. Mude também o nome do botão.
Na forma que trabalharemos, o ID será pego diretamente da caixa de combinação.
No código do frame, no construtor dele, coloque esse código:
public ViewCombobox() {
initComponents();
ProdutoDAO dao = new ProdutoDAO(); // Importe
for(Produto p: dao.read()) {
cbProds.addItem(p);
}
}
Só que no caso acima, ele retorna os nomes dos pacotes, das classes e os números dos hashcodes.
Para solucionar isso, vá em model.bean, e na classe Produto, crie um método toString() com esse código, sobrepondo o código original:
@Override
public String toString() {
return getDescricao();
}
E no método de action do botão, coloque isso:
private void btnPegActionPerformed(java.awt.event.ActionEvent evt) {
Produto prod = (Produto)cbProds.getSelectedItem();
JOptionPane.showMessageDialog(null, "ID: " + prod.getId() + "\nDescrição: " + prod.getDescricao(), "Id e Descrição", JOptionPane.INFORMATION_MESSAGE);
}
Agora vamos colocar em prática tudo aprendido até agora, criando uma urna em Java.
Crie um novo projeto, marque a opção "Usar pasta dedicada para armazenar bibliotecas", na pasta ./lib, e desmarque a opção de classe principal.
Crie um pacote com nome view e crie o frame com o nome ViewLogin, centralize, mas não tire o redimensionamento, e coloque o título de Área de Acesso.
Aumente um pouco o frame e coloque um painel que cubra o tamanho todo do frame, e coloque no painel a cor branca.
Coloque outro painel, mas cubra cerca de 1/3 da parte superior dele, e coloque a cor azul claro.
Na parte branca, coloque um campo de texto (txtLogin) e um de senha (txtSenha), e os labels indicando eles, e um botão para entrar. Veja também o redimensionamento de forma de que os campos e botões fiquem no meio da tela.
Para personalizar o botão, aumente ele um pouco, e em background altere a cor para azul, podemos mudar a cor da letra em foreground também (o background não funciona em alguns modelos de frame como o Windows).
Crie um pacote para colocar imagens, e cole um ícone para login e uma imagem para usuários. Nas propriedades do botão, coloque o ícone de login (se quiser o ícone do lado direito da frase, nas propriedades do texto do botão, é só colocar left em HorizontalTextPosition).
Na parte azul, coloque o ícone de usuário e o centralize (se for o caso, coloque center em HorizontalAlignament também). Embaixo dele coloque um label com o texto Área de Acesso, configure a fonte e tamanho da letra e o centralize também.
Dentro da classe ViewLogin, crie um método com esse código:
public boolean checkLogin(String login, String senha) {
return login.equals("usuario") && senha.equals("senha");
}
Crie a tela ViewPrincipal, mas não mexa nela por enquanto.
No action do botão do ViewLogin, podemos fazer a verificação dessa forma:
private void btnEntrActionPerformed(java.awt.event.ActionEvent evt) {
if(this.checkLogin(txtLogin.getText().trim(), String.valueOf(txtSenha.getPassword()).trim())) {
new ViewPrincipal().setVisible(true);
this.dispose();
}
else {
JOptionPane.showMessageDialog(null, "Dados Inválidos", "Erro de Autenticação", JOptionPane.WARNING_MESSAGE); // Importe javax.swing.JOptionPane
}
}
Podemos também personalizar as mensagens do JOptionPane, com quatro parâmentros, como visto, podemos também colocar título e o ícone da mensagem, muitos utilizam apenas com dois parâmetros, onde definimos só a frase.
Podemos colocar números no lugar das constantes dos ícones, dessa forma:
JOptionPane.showMessageDialog(null, "Dados Inválidos", "Erro de Autenticação", 0);
Na tela ViewPrincipal, centralize, coloque título, tire o redimensionamento e aumente ele.
Coloque um painel e o expanda totalmente, e deixe ele branco, e copie o painel azul com as imagens e títulos do login para ele, mudando a frase para tela principal e o ícone.
Na parte branca, crie três botoões, denominados eleitor, urna e candidado, aumente e mude as cores deles e o posicione corretamente. Coloque ícones nos botões e alinhe eles à direita.
Teste com shift F6.
No ViewPrincipal, coloque uma Barra de Menu, e nela coloque os menus Arquivo, Eleitor, Candidato e Partido.
Em Arquivo, coloque o item Sair, que terá esse código no action:
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
PS: No item de menu, podemos clicar em atalho e colocar um atalho de tecla, como Shift S.
Como exercício, crie um padrão de telas, com o painel branco, um painel superior azul com um ícone e o label com partidos. O nome da classe será ViewPartido.
Copie, mudando as imagens e nomes, ViewCandidato, ViewEleitor e ViewUrna.
Abra o frame ViewPartido, e coloque na parte branca um painel de rolagem, e deixe ele na metade direita da parte branca, e dentro dele, coloque uma tabela.
Na metade esquerda, coloque um painel (painel comum mesmo), e dentro dele um label pra indicar nome, um campo de texto (txtNome) e três botões, denominados novo, excluir e salvar.
Igual foi feita com a tela de partidos, coloque um painel e dentro dele uma tabela. No lado esquerdo crie um painel comum.
No painel comum, coloque um campo de texto pra nome, uma caixa de combinação (select) para partidos e um controle giratório para o número, e os botões novo, excluir e salvar.
Igual às duas telas anteriores, crie um painel comun na metade branca direita, coloque uma tabela, e no lado esquerdo coloque um painel normal.
No painel esquerdo, coloque um campo de texto pra nome, um campo formatado para CPF, um campo formatado para CEP, um campo de texto para rua, um campo de texto para bairro e um controle giratório para número, e os botões novo, excluir e salvar.
Vá formatando os campos formatados também, para adiantar.
PS: Provavelmente será necessário aumentar o frame para baixo, para caber tudo.
Os botões novo, excluir e salvar podem ser estilizados com ícones, da mesma forma, indo em icon nas propriedades de cada um.
As cores e fonte de letra também podem ser alteradas.
Na parte branca, coloque dois paineis comuns nas duas metades, e na metade esquerda coloque um campo formatado para CPF, um campo de texto para números, os labels correspondentes e os botões branco, corrige e confirma, configure as cores igual de uma urna mesmo.
Na metade direita, coloque um label com o nome e um campo de texto, nas propriedades do campo de texto desabilite ele desmarcando a opção enable.
Para colocarmos a máscara em campos formatados é simples, vá em propriedades e em formatterFactory, e em máscara vá em personalizado, lá você seleciona o tipo de máscara a ser usada.
Esses são os exemplos que usaremos nesse frame (podendo ser usado várias outras combinações):
##/##/####
###.###.###-##
(##) ####-####
(##) #####-####
PS: A hashtag (#) só aceita números, para letras usamos ?, letras e números usamos A, qualquer coisa usamos * e hexadecimais usamos H. Uma máscara de placas de veículos poderia ser ???-####
, por exemplo.
Como os dados de campos formatados, como os de CPF e CEP, acabam passando outros caracteres como traços, e por padrão, os espaços pré-definidos são passados a mesma quantidade de caracteres mesmo enviados sem dados (o de CEP por exemplo, sempre passará 9 caracteres, contando o traço e os espaços não preenchidos).
Vamos por exemplo, em ViewEleitor, criar um action para testar o campo de CPF, colocando esse código de teste:
private void btnSalvActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println(txtCPF.getText().length());
}
Independente do que passarmos, sempre dará 14 caracteres, para remover os espaços em brancos, use o trim(), assim:
private void btnSalvActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println(txtCPF.getText().trim().length());
}
Com isso, podemos fazer uma validação, dessa forma:
private void btnSalvActionPerformed(java.awt.event.ActionEvent evt) {
if(txtCPF.getText().trim().length() < 14) {
System.out.println("CPF Vazio");
}
else {
System.out.println(txtCPF.getText());
txtCPF.setText("");
}
}
Ou melhorar a validação assim:
private void btnSalvActionPerformed(java.awt.event.ActionEvent evt) {
if(txtCPF.getText().trim().length() < 14 || txtNome.getText().trim().equals("")) {
System.out.println("Campos Vazios");
}
else {
System.out.println(txtCPF.getText());
txtCPF.setText("");
}
}