sábado, 24 de junho de 2017

Java Desktop - Login de acesso

Eclipse Login Window

Retomando o projeto de Cadastro de Clientes, podemos aprimorar criando uma tela de Login.

Para implementar este recurso, é necessário ter o projeto pronto, da série Java Desktop - Cadastro CRUD desde blog. Confira neste link.

São três alterações: criar uma tabela no banco de dados, a classe Dao para o cadastro de novos acessos, criar uma classe JFrame para a tela/janela de Login e alterar a classe Principal, que é a classe main.

TABELA LOGIN NO BANCO DE DADOS

Adicione uma nova tabela à base de dados cadastrocliente criada - veja nesta publicação para recordar se precisar.



Xampp new table

Na opção de coluna, coloque para adicionar 4 colunas: a coluna do id - chave primária, operador (O nome da pessoa que irá acessar - para facilitar a identificação), nome e senha (os três campos tipo VARCHAR).


PHPMyAdmin new table
Lembrando de salvar a tabela clicando no botão Guardar no canto inferior direito.

CLASSE LOGINDAO

Para fazer a validação do nome e senha precisamos criar a classe Dao, que fará a conexão com o banco, verificando os dados dos campos nome e senha, comparando com os dados digitados na janela de Login.

Crie a classe dentro do pacote dao, mantendo o padrão MVC, da mesma forma feita na parte 4 da série de publicações Java Desktop, Cadastro CRUD, neste link


Para manter um padrão de nomenclatura, nomeie a classe como LoginDao.



A validação será feita com um método booleano - que retorna true ou false, verdadeiro ou falso, método que é executado ao clicar no botão Entrar da janela de Login, comparando os dados digitados nos campos nome e senha com os campos respectivos na tabela Login do banco de dados

Confira o código abaixo com os comentários:

1:  package br.com.cliente.dao;  
2:  import java.sql.PreparedStatement;  
3:  import java.sql.ResultSet;  
4:  import java.sql.SQLException;  
5:  import br.com.cliente.util.Conector;  
6:  public class LoginDao {  
7:  public boolean acessoLogin(String nome, String senha ) {  
8:             //Método booleano com dois argumentos para autenticar nome e senha do usuário;       
9:            String sql = "select * from Login where nome=? and senha=?";  
10:            //Cria variável tipo String com comando de seleção SQL dos campos nome e senha;  
11:            boolean check = false; //Cria variável boolean abribuindo o valor false;  
12:            try {  
13:                 PreparedStatement ps = Conector.getConexao().prepareStatement(sql);  
14:                 //Faz a conexão ao banco e executa a variável sql (comando select) e atribui  
15:                 //à variável ps do PreparedStatement;  
16:                 ps.setString(1, nome);  
17:                 //Seta à String nome os dados do campo nome da tabela Login do banco;  
18:                 ps.setString(2, senha);  
19:                 //Seta à String senha os dados do campo senha da tabela Login do banco;  
20:                 ResultSet rs = ps.executeQuery();  
21:                 //Executa o comando, listando os dados de nome e senha cadastrados no banco;  
22:                 if (rs.next()) { //Condicional para verificar se os valores abribuídos aos argumentos  
23:                      //String nome e senha do método correspondem ou não ao conteúdo de nome e senha  
24:                      //no banco de dados;  
25:                      check = true;  
26:                      //Se correspondem, o método responde verdadeiro - true;  
27:                 }  
28:            } catch (SQLException e) {  
29:                 // TODO Auto-generated catch block  
30:                 e.printStackTrace();  
31:            }  
32:            return check;  
33:            //Retorna a variável boolean check;  
34:       }  
35:  }  

CLASSE JFRAME - TELA DE LOGIN

Crie a classe JFrame no pacote view - reveja esta publicação para mais detalhes. Pronta a classe Dao, fechamos o login de acesso criando a janela onde os dados são digitados e, chamando o método acessoLogin da Dao, fazendo a validação. Lembrando que a classe JFrame está detalhada na publicação Java Desktop, Cadastro CRUD -5, neste link.

Eclipse Java class JFrame

Para o formulário de Login, nomeei como LoginCadastro. Pode ser FormLogin ou como preferir.


Java new JFrame class

O código deverá ficar como na sequência abaixo. Acompanhe os comentários nas rotinas de validação dos dados dos campos nome e senha, quando pressionado Enter no teclado após digitar a senha, quando clicar no botão Entrar ou pressionar a tecla Enter, quando o foco de tabulação ou seleção estiver no botão Entrar:

1:  package br.com.cliente.view;  
2:    
3:  import java.awt.BorderLayout;  
4:  import java.awt.Color;  
5:  import java.awt.EventQueue;  
6:  import java.awt.Font;  
7:  import java.awt.SystemColor;  
8:  import java.awt.event.ActionEvent;  
9:  import java.awt.event.ActionListener;  
10:  import java.awt.event.KeyAdapter;  
11:  import java.awt.event.KeyEvent;  
12:    
13:  import javax.swing.ImageIcon;  
14:  import javax.swing.JButton;  
15:  import javax.swing.JFrame;  
16:  import javax.swing.JLabel;  
17:  import javax.swing.JOptionPane;  
18:  import javax.swing.JPanel;  
19:  import javax.swing.JPasswordField;  
20:  import javax.swing.JTextField;  
21:  import javax.swing.border.EmptyBorder;  
22:    
23:  import br.com.cliente.dao.LoginDao;  
24:  import br.com.cliente.view.LoginCadastro;  
25:    
26:    
27:  public class LoginCadastro extends JFrame {  
28:    
29:       private JPanel contentPane;  
30:       private JTextField txtNome;  
31:       private JPasswordField txtSenha;  
32:         
33:    
34:       public LoginCadastro() {  
35:            setBackground(new Color(189, 183, 107));  
36:            setResizable(false);  
37:            setTitle("Cadastro de Clientes - Acesso");  
38:            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
39:            setBounds(100, 100, 452, 205);  
40:            contentPane = new JPanel();  
41:            contentPane.setBackground(Color.LIGHT_GRAY);  
42:            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));  
43:            setContentPane(contentPane);  
44:            contentPane.setLayout(null);  
45:            this.setLocationRelativeTo(null);  
46:              
47:            JLabel lblNewLabel = new JLabel("Nome:");  
48:            lblNewLabel.setFont(new Font("Ubuntu", Font.BOLD, 14));  
49:            lblNewLabel.setForeground(SystemColor.desktop);  
50:            lblNewLabel.setBounds(230, 51, 86, 20);  
51:            contentPane.add(lblNewLabel);  
52:              
53:            JLabel lblSenha = new JLabel("Senha:");  
54:            lblSenha.setForeground(Color.RED);  
55:            lblSenha.setFont(new Font("Ubuntu", Font.BOLD, 14));  
56:            lblSenha.setBounds(230, 84, 70, 15);  
57:            contentPane.add(lblSenha);  
58:              
59:            txtNome = new JTextField();  
60:            txtNome.setFont(new Font("Ubuntu", Font.BOLD, 14));  
61:            txtNome.setForeground(SystemColor.desktop);  
62:            txtNome.setBounds(312, 52, 114, 19);  
63:            contentPane.add(txtNome);  
64:            txtNome.setColumns(10);  
65:              
66:            txtSenha = new JPasswordField();  
67:            txtSenha.addKeyListener(new KeyAdapter() {  
68:                 //Programa evento ao pressionar tecla determinada;  
69:                 @Override  
70:                 public void keyPressed(KeyEvent arg0) {  
71:                      //Método para programar evento ao pressionar tecla;  
72:                      if(arg0.getKeyCode()==KeyEvent.VK_ENTER){  
73:                           //Se a tecla Enter por pressionada com o campo de senha selecionado,   
74:                           //dispara evento programado abaixo (autenticação);  
75:                           String pass = new String(txtSenha.getPassword()).trim();  
76:                           //Cria variável String onde é gravado a senha digitada no campo senha;  
77:                           LoginDao dao = new LoginDao();  
78:                           //Instância da classe LoginDao;  
79:                           if(dao.acessoLogin(txtNome.getText(), pass)){  
80:                                //Condicional para validar nome e senha, chamando o método  
81:                                //acessoLogin da classe LoginDao;  
82:                                new FormCliente().setVisible(true);  
83:                                //Abre o formulário de cliente caso o nome e senha estejam corretos;  
84:                                LoginCadastro ls = new LoginCadastro();  
85:                                ls.dispose();  
86:                                //Fecha a janela de Login;  
87:                           }else{  
88:                                JOptionPane.showMessageDialog(null, "Nome e/ou senha invalidos...");  
89:                                //Caso o nome e/ou senha não conferem, abre diálogo com mensagem;  
90:                           }  
91:                      }  
92:                 }  
93:            });  
94:            txtSenha.setBounds(312, 83, 114, 19);  
95:            contentPane.add(txtSenha);  
96:              
97:            JButton btnEntrar = new JButton("Entrar");  
98:            btnEntrar.addKeyListener(new KeyAdapter() {  
99:                 @Override  
100:                 public void keyPressed(KeyEvent arg0) {  
101:                      if(arg0.getKeyCode()==KeyEvent.VK_ENTER){  
102:                           //Se a tecla Enter por pressionada quando o botão Entrar estiver selecionado,   
103:                           //dispara evento programado abaixo (autenticação - semelhante ao campo de senha);  
104:                           String pass = new String(txtSenha.getPassword()).trim();  
105:                           LoginDao dao = new LoginDao();  
106:                           if(dao.acessoLogin(txtNome.getText(), pass)){  
107:                                new FormCliente().setVisible(true);  
108:                                LoginCadastro ls = new LoginCadastro();  
109:                                ls.dispose();  
110:                           }else{  
111:                                JOptionPane.showMessageDialog(null, "Nome e/ou senha invalidos...");  
112:                           }  
113:                 }  
114:                 }  
115:            });  
116:            btnEntrar.setForeground(new Color(0, 128, 0));  
117:            btnEntrar.setFont(new Font("Arial Black", Font.PLAIN, 12));  
118:            btnEntrar.requestFocus();  
119:            btnEntrar.addActionListener(new ActionListener() {  
120:                 public void actionPerformed(ActionEvent arg0) {  
121:                      //Se clicar no botão Entrar, dispara evento programado abaixo (autenticação - idem);  
122:                      String pass = new String(txtSenha.getPassword()).trim();  
123:                      LoginDao dao = new LoginDao();  
124:                      if(dao.acessoLogin(txtNome.getText(), pass)){  
125:                           new FormCliente().setVisible(true);  
126:                           LoginCadastro ls = new LoginCadastro();  
127:                           ls.dispose();  
128:                      }else{  
129:                           JOptionPane.showMessageDialog(null, "Nome e/ou senha invalidos...");  
130:                      }  
131:                 }  
132:            });  
133:            btnEntrar.setBounds(312, 121, 95, 25);  
134:            contentPane.add(btnEntrar);  
135:              
136:            JLabel lblNewLabel_1 = new JLabel("");  
137:            lblNewLabel_1.setIcon(new ImageIcon(LoginCadastro.class.getResource("/img/KeyChainAccess_37052.png")));  
138:            lblNewLabel_1.setBounds(47, 27, 128, 119);  
139:            contentPane.add(lblNewLabel_1);  
140:       }  
141:    
142:  }  
143:    

A rotina de validação presente no código fica no método actionPerformed, que pode ser criado no windowsbuilder, pressionando o botão direito do mouse no campo de texto ou botão da janela. Também pode ser feito como visto na parte final da sequência de publicações Java Desktop - Cadastro CRUD, implementando Action Listener e, manualmente, inserindo os códigos de validação no método actionPerformed, se preferir:


Eclipse Windowbuilder actionPerformed menu


A imagem da chave é ilustrativa. Você pode colocar a imagem que preferir, com o porém de que as dimensões da mesma deve ser de 128 x 128 pixels. Coloque a imagem de sua preferência na pasta img do projeto, copiando e colando - veja o título 2 desta publicação. Caso a nova imagem não esteja aparecendo no projeto, tente a opção Refresh com o botão direito sobre a pasta img:


Refresh option on Eclipse

Caso o recurso Refresh não funcione, simplesmente copie e cole a imagem na pasta img, dentro do Eclipse, como na imagem acima.

CLASSE PRINCIPAL

Finalizando, para o sistema pedir login de acesso ele deve iniciar "chamando" a janela de Login. A classe Principal, a classe com o método main, originalmente inicia direto o formulário de cadastro de clientes, FormCliente. No seu projeto deve estar assim:


Basta então alterar para que o sistema "chame" a janela de Login, ou seja, a classe LoginCadastro.


Em seguida, pode excluir o import de FormCliente, que não terá mais utilidade.

TESTANDO O SISTEMA

Até aqui, a criação de usuários só pode ser feita pelo banco de dados, ou seja, pelo phpMyAdmin.

Para testar, crie um novo usuário selecionando a tabela login e a aba Insere no phpMyAdmin, clicando em Executar para salvar os dados:



Execute o sistema no Eclipse clicando na seta verde na barra de ferramentas superior, ou pelo menu Run (com a classe Principal selecionada). Na imagem abaixo, um exemplo de quando os dados de login estão corretos:


Eclipse Java Login

Para conferir quando é digitado um nome ou senha inválidos, veja se aparece a Mensagem de erro JOptionPane do código, como na imagem abaixo:

Eclipse Java Login error

Na próxima publicação veremos outro aprimoramento, para poder inserir novos acessos ao sistema, dentro do próprio sistema, ao invés de inserir direto pelo gerenciador de banco de dados phpMyAdmin.

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

quarta-feira, 24 de maio de 2017

Como enviar textos do smartphone para o Kindle

Moto G3 & Kindle

A tela do celular não favorece muito a leitura de textos longos, da mesma forma que no computador desktop ou notebook. Para estes dois, veja como enviar textos para o Kindle nestes links: 
Como enviar arquivos de texto do computador direto para o Kindle
Como enviar e converter arquivos de texto para o Kindle via e-mail
Enviando textos da web para o Kindle

Você também pode passar um texto interessante que você viu no seu celular, além de arquivos de textos que estejam no seu aparelho. 

Antes de qualquer coisa, confira nesta publicação como colocar o seu e-mail numa lista dentro do seu cadastro na Amazon, para poder enviar os textos para o e-book.

APLICATIVOS NECESSÁRIOS

Aplicativo Kindle

O aplicativo Kindle for Android permite enviar arquivos para o dispositivo, além de você poder ter acesso ao conteúdo do seu e-book no celular.


Aplicativo

Já para enviar textos do navegador de internet para o dispositivo, instale o Upload to Kindle.


Aplicativo

Também, como alternativa para enviar texto da web, tem o Read on Kindle.

ENVIANDO ARQUIVOS DE TEXTO...

Se você já baixou arquivos de texto, em PDF por exemplo, basta localizá-lo no seu celular. Quando você acabou de baixar aparece nas notificações, porém se for arquivo antigo, você terá de buscar onde ele estiver gravado na memória do seu aparelho. 

Em geral ele fica na pasta downloads. Você deve precisar de um aplicativo gerenciador de arquivos, caso não tenha já instalado no seu smartphone. Pesquise no Play Store. Você deverá encontrar um de acordo com a marca do seu aparelho.


Android

Localizando os arquivos no smartphone:

Por padrão os arquivos baixados vão para a memória interna do celular, na pasta downloads. Pelo gerenciador de arquivos você pode localizar esta pasta acessando o conteúdo da memória interna, como na imagem abaixo (exemplo num Moto G 3):

Android

A dica é localizar alguma lupa de pesquisa no aplicativo, dependendo da marca do seu celular e do aplicativo escolhido. Pois assim bastará digitar o nome. No caso do gerenciador padrão para o Moto G, a busca é manual. Confira a pasta downloads do gerenciador da motorola:

Android

Leitor de PDF do Drive:

Aberto o arquivo no aplicativo de leitura do seu celular, localize o menu de opções do aplicativo, o que por padrão são três pontos ou três linhas. Como exemplo de leitor de PDF coloco o do Drive, que vem de fábrica em boa parte dos aparelhos de celular:

Android

Envie para o Kindle com a opção Enviar arquivo:

Android

Localize o ícone do Kindle para enviar:

Android

Selecione a opção correspondente ao nome do seu dispositivo, conforme cadastrado na sua conta na Amazon:

Android

Finalmente, ative o WI-FI de seu Kindle para receber o arquivo.

ENVIANDO TEXTO DO NAVEGADOR WEB...

Uma vez na página onde estiver o texto que deseja enviar, clique nos três pontos no canto superior direito do navegador, para acessar o menu de opções e escolha Compartilhar...

Android

Se escolher o Upload to Kindle, surgirá a seguinte tela, onde você deverá colocar o nome de sua preferência, o seu e-mail do kindle e seu e-mail pessoal (lembrando, o que tiver na lista de e-mails autorizados do seu cadastro na Amazon, conforme orientação neste link):


Upload to Kindle

Caso prefira o Read on Kindle, surgirá a tela abaixo, pedindo o seu e-mail do kindle e o e-mail pessoa registrado na lista de autorizados:


Read on Kindle

Confira ativando o WI-FI no seu e-book Kindle o texto enviado.

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

segunda-feira, 8 de maio de 2017

Java Desktop, Cadastro CRUD: Final


Na parte 5 o sistema ficou parcialmente pronto, com a janela desenhada, porém sem funcionamento. 

Nesta parte final veremos passo a passo os métodos que farão a rotina de inserir, atualizar, pesquisar e deletar dados. Usando a Orientação a Objetos, veremos o método montaCliente, que monta no objeto Cliente os dados preenchidos no formulário, para inserir, atualizar e deletar; limpaTela para apagar os campos, quando necessário para inserir novos dados; setCliente, responsável por preencher os campos do formulário com os dados do cliente selecionado na lista de pesquisa; carregaLista, que "alimenta" o combobox com os registros cadastrados no banco e os métodos da interface de eventos ActionListener, onde os botões são programados para executar cada um sua ação no sistema. Para que o CRUD funcione é preciso criar uma outra classe, como dito anteriormente na parte 2, a classe ClienteCT.

CLASSE CLIENTECT

Crie a Classe ClienteCT no pacote controle, com o código abaixo. Esta classe "chama" os métodos da classe ClienteDao e atribuem a um objeto da classe Cliente.
1 package br.com.cliente.controle;
2 
3 import java.util.List;
4 import br.com.fabrica.bean.Cliente;
5 import br.com.fabrica.dao.ClienteDao;
6 
7 public class ClienteCT {
8   public void insert(Cliente c){
9   ClienteDao dao = new ClienteDao();
10  dao.insert(c);
11  }
12 
13  public void update(Cliente c){
14  ClienteDao dao = new ClienteDao();
15  dao.update(c);
16  }
17 
18  public void delete(Cliente c){
19  ClienteDao dao = new ClienteDao();
20  dao.delete(c);
21  }
22 
23  public Cliente select(int i){
24  ClienteDao dao = new ClienteDao();
25  Cliente c = (Cliente) dao.select();
26  return c;
27  }
28 
29  public List select(){
30  ClienteDao dao = new ClienteDao();
31  List c = dao.select();
32  return c;
33  }
34 }

MÉTODOS DA ROTINA CRUD NO FORMULÁRIO

Em seguida, volte à classe FormCliente. Abaixo dos atributos privados, crie o método montaCliente (observe os comentários no código abaixo para entender a função do método):
1  public Cliente montaCliente(){ 
2    //Pega dos dados digitados nos campos do formulário e atribui ao objeto da classe Cliente;
3    Cliente c = new Cliente();
4     c.setNome(this.txtNome.getText());
5     c.setEndereco(this.txtEndereco.getText());
6     c.setMunicipio(this.txtMunicipio.getText());
7     c.setCep(this.txtCep.getText());
8     c.setTel(this.txtTel.getText());
9     c.setCel(this.txtCel.getText());
10    c.setCpf(this.txtCpf.getText());
11    c.setCnpj(this.txtCnpj.getText());
12    c.setGenero(genero);
13    
14    if(this.txtID.getText() != null && !this.txtID.getText().equals("")){
15     c.setId(Integer.parseInt(this.txtID.getText()));
16     //Condicional para garantir que o campo ID não seja nulo;
17    }
18    return c;
19    } 
Logo abaixo, ponha o código abaixo, limpaTela, método que apaga os campos do formulário:
1 public void limpaTela(){
2    //Limpa os campos do formulário;
3    this.txtNome.setText("");
4    this.txtEndereco.setText("");
5    this.txtMunicipio.setText("");
6    this.txtCep.setText("");
7    this.txtTel.setText("");
8    this.txtCel.setText("");
9    this.txtCpf.setText("");
10   this.txtCnpj.setText("");
11   this.txtID.setText(null);
12   this.rdbtnF.setSelected(false);
13   this.rdbtnM.setSelected(false);
14  }
Para fazer a seleção de um cliente, preenchendo os dados no formulário, o método setCliente:
1  public void setCliente(Cliente c){ 
2     //Preenche formulário de Cliente selecionado no combobox, ao clicar no botão pesquisar;
3     this.txtNome.setText(c.getNome());
4     this.txtEndereco.setText(c.getEndereco());
5     this.txtMunicipio.setText(c.getMunicipio());
6     this.txtCep.setText(c.getCep());
7     this.txtTel.setText(c.getTel());
8     this.txtCel.setText(c.getCel());
9     this.txtCpf.setText(c.getCpf());
10    this.txtCnpj.setText(c.getCnpj());
11    if(c.getGenero().equals("F")){
12     this.rdbtnF.setSelected(true);
13     genero = "F";
14    }else if(c.getGenero().equals("M")){
15     this.rdbtnM.setSelected(true);
16     genero = "M";
17    }
18    //Condicional para seleção do radiobutton do registro selecionado;
19    if(c.getId() != null && c.getId() > 0){
20     this.txtID.setText(c.getId().toString());
21    } //Condicional para garantir que o campo ID não seja nulo;
22   }
Carregar lista no combobox com o método carregaLista:
1 public void carregaLista(){ 
2    //Preenche Combobox com registros do banco de dados
3    ClienteCT mbc = new ClienteCT();
4    
5    List ClienteBd = mbc.select();
6    cbPesquisar.removeAllItems();
7    for (Cliente Medico : ClienteBd) {
8    cbPesquisar.addItem(Medico);
9   }
10  }

ActionListener - colocando os botões para funcionar

Seguindo o mesmo passo dado na Parte 4, implementando a interface Dao, implemente a interface de eventos ActionListener, para programar os eventos dos botões do formulário.


Eclipse - implements ActionListener
Além de implementar o método ActionListener, é preciso adicionar duas linhas na sequência de códigos de confecção dos botões, no método public FormCliente(), conforme destaque em vermelho abaixo:
1:  btnSalvar = new JButton("");  
2:            btnSalvar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/save.png")));  
3:            btnSalvar.setBounds(193, 327, 28, 23);  
4:            btnSalvar.addActionListener(this);  
5:            btnSalvar.setActionCommand("salvar");  
6:            contentPane.add(btnSalvar);  
7:              
8:             btnEditar = new JButton("");  
9:            btnEditar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/edit.png")));  
10:            btnEditar.setBounds(231, 327, 28, 23);  
11:            btnEditar.addActionListener(this);  
12:            btnEditar.setActionCommand("editar");  
13:            contentPane.add(btnEditar);  
14:              
15:             btnLimpar = new JButton("");  
16:            btnLimpar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/clean.png")));  
17:            btnLimpar.setBounds(269, 327, 28, 23);  
18:            btnLimpar.addActionListener(this);  
19:            btnLimpar.setActionCommand("limpar");  
20:            contentPane.add(btnLimpar);  
21:              
22:             btnExcluir = new JButton("");  
23:            btnExcluir.setIcon(new ImageIcon(FormCliente.class.getResource("/img/delete.png")));  
24:            btnExcluir.setBounds(308, 327, 28, 23);  
25:            btnExcluir.addActionListener(this);  
26:            btnExcluir.setActionCommand("excluir");  
27:            contentPane.add(btnExcluir);  
28:              
29:             btnPesquisar = new JButton("");  
30:            btnPesquisar.setIcon(new ImageIcon(FormCliente.class.getResource("/img/search.png")));  
31:            btnPesquisar.setBounds(422, 22, 28, 23);  
32:            btnPesquisar.addActionListener(this);  
33:            btnPesquisar.setActionCommand("pesquisar");  
34:            contentPane.add(btnPesquisar);  
Em seguida, acompanhe abaixo as rotinas de código dentro do método actionPerformed.

Botão Salvar - confira o código abaixo com os comentários:
1  @Override
2   public void actionPerformed(ActionEvent e) {
3    if(e.getActionCommand().equals(this.btnSalvar.getActionCommand())){
4     //Condicional - se clicar no botão Salvar (disquete)...
5     Cliente c = this.montaCliente();
6     //Chama o método montaCliente para pegar os dados e gravar no objeto Cliente c;
7     ClienteCT cbc = new ClienteCT();
8     //Instancia a classe de controle ClienteCT;
9     cbc.insert(c);
10    //Chama o método insert da classe ClienteCT para inserir os dados do objeto Cliente (c) de montaCliente no banco;
11    this.limpaTela();
12    //Limpa os campos após inserir/salvar dados no banco;
13    this.carregaLista();
14    //Carrega a lista do combobox, atualizando após inserção;
15    JOptionPane.showMessageDialog(null, "Cliente "+txtNome.getText()+" cadastrado...");
16    //Abre diálogo de mensagem, informando que o cliente foi cadastrado;
17   }


Java Desktop

Botão Pesquisar:
1 }else if(e.getActionCommand().equals(this.btnPesquisar.getActionCommand())){
2    //Condicional adicional - se clicar no botão Selecionar (lupa)...
3    if(cbPesquisar.getSelectedItem() != null && !cbPesquisar.getSelectedItem().equals("")){
4     //Condicional - se o campo de pesquisa NÃO estiver em branco ao clicar em Selecionar...
5     Cliente c = (Cliente) cbPesquisar.getSelectedItem();
6     //Cast - pega o item selecionado no combobox e transforma num objeto Cliente;
7     this.setCliente(c);
8     //Chama o método setCliente para preencher os campos do formulário a partir do objeto Cliente da seleção do combobox;
9    }else{
10    JOptionPane.showMessageDialog(null, "Escolha um cliente na lista para pesquisar.");
11    //Caso o campo combobox esteja em branco ao clicar em Selecionar, abre diálogo orientando escolher primeiro um cliente da lista;
12   }
13 }
Java Desktop

Botão Excluir:
1 }else if(e.getActionCommand().equals(this.btnExcluir.getActionCommand())){
2     //Caso o botão acionado seja Excluir (ícone "X");
3     String[] options = {"Sim", "Não"};
4     //Cria variável tipo vetor para definir botão de seleção ativado por padrão;
5     int conf = JOptionPane.showOptionDialog(null, null, "CONFIRMA EXCLUSÃO?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
6     //Cria variável tipo int com configuração de janela de diálogo de confirmação de exclusão;
7     if(conf == JOptionPane.YES_OPTION){
8      //Condicional: se a opção for SIM na confirmação...
9      Cliente c = this.montaCliente();
10     //Chama o método montaCliente para pegar os dados e gravar no objeto Cliente c;
11     ClienteCT cbc = new ClienteCT();
12     //Instancia a classe de controle ClienteCT;
13     cbc.delete(c);
14     //Chama o método delete da classe ClienteCT para excluir dados do objeto Cliente (c) de montaCliente no banco;
15     this.limpaTela();
16     //Limpa os campos após excluir dados do banco;
17     this.carregaLista();
18     //Carrega a lista do combobox, atualizando após inserção;
19    }
Java Desktop

Botão Editar:
1 }else if(e.getActionCommand().equals(this.btnEditar.getActionCommand())){
2     //Caso o botão acionado seja Editar (ícone Lápis);
3     String[] options = {"Sim", "Não"};
4     //Cria variável tipo vetor para definir botão de seleção ativado por padrão;
5       int conf = JOptionPane.showOptionDialog(null, null, "CONFIRMA EDIÇÃO?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
6     //Cria variável tipo int com configuração de janela de diálogo de confirmação de edição;
7       if(conf == JOptionPane.YES_OPTION){
8      //Condicional: se a opção for SIM na confirmação...
9      Cliente c = this.montaCliente();
10     //Chama o método montaCliente para pegar os dados e gravar no objeto Cliente c;
11     ClienteCT cbc = new ClienteCT();
12     //Instancia a classe de controle ClienteCT;
13     cbc.update(c);
14     //Chama o método update da classe ClienteCT para atualizar dados do objeto Cliente (c) de montaCliente no banco;
15     this.limpaTela();
16     //Limpa os campos após atualizar os dados do banco;
17     this.carregaLista();
18     //Carrega a lista do combobox, atualizando após edição;
19    }
20   }

Implementação do ActionListener completa:

1 @Override
2  public void actionPerformed(ActionEvent e) {
3   if(e.getActionCommand().equals(this.btnSalvar.getActionCommand())){
4    //Condicional - se clicar no botão Salvar (disquete)...
5    Cliente c = this.montaCliente();
6    //Chama o método montaCliente para pegar os dados e gravar no objeto;
7    ClienteCT cbc = new ClienteCT();
8    //Instancia a classe de controle ClienteCT;
9    cbc.insert(c);
10   //Chama o método insert da classe ClienteCT para inserir dados no banco;
11   this.limpaTela();
12   //Limpa os campos após inserir/salvar dados no banco;
13   this.carregaLista();
14   //Carrega a lista do combobox, atualizando após inserção;
15   JOptionPane.showMessageDialog(null, "Cliente "+txtNome.getText()+" cadastrado...");
16   //Abre diálogo de mensagem, informando que o cliente foi cadastrado;
17  }else if(e.getActionCommand().equals(this.btnPesquisar.getActionCommand())){
18   //Condicional adicional - se clicar no botão Selecionar (lupa)...
19   if(cbPesquisar.getSelectedItem() != null && !cbPesquisar.getSelectedItem().equals("")){
20    //Condicional - se o campo de pesquisa NÃO estiver em branco ao clicar em Selecionar...
21    Cliente c = (Cliente) cbPesquisar.getSelectedItem();
22    //Cast - pega o item selecionado no combobox e transforma num objeto Cliente;
23    this.setCliente(c);
24    //Chama o método setCliente para preencher os campos do formulário a partir do objeto Cliente da seleção do combobox;
25   }else{
26    JOptionPane.showMessageDialog(null, "Escolha um cliente na lista para pesquisar.");
27    //Caso o campo combobox esteja em branco ao clicar em Selecionar, abre diálogo orientando escolher primeiro um cliente da lista;
28   }
29   }else if(e.getActionCommand().equals(this.btnLimpar.getActionCommand())){
30    //Ao clicar no botão Limpar (ícone-vassoura);
31    this.limpaTela();
32    //Aciona o método limpaTela, limpando os campos do formulário;
33   }else if(e.getActionCommand().equals(this.btnExcluir.getActionCommand())){
34    //Caso o botão acionado seja Excluir (ícone "X");
35    String[] options = {"Sim", "Não"};
36    //Cria variável tipo vetor para definir botão de seleção ativado por padrão;
37    int conf = JOptionPane.showOptionDialog(null, null, "CONFIRMA EXCLUSÃO?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
38    //Cria variável tipo int com configuração de janela de diálogo de confirmação de exclusão;
39    if(conf == JOptionPane.YES_OPTION){
40     //Condicional: se a opção for SIM na confirmação...
41     Cliente c = this.montaCliente();
42     //Chama o método montaCliente para pegar os dados e gravar no objeto Cliente c;
43     ClienteCT cbc = new ClienteCT();
44     //Instancia a classe de controle ClienteCT;
45     cbc.delete(c);
46     //Chama o método delete da classe ClienteCT para excluir dados do objeto Cliente (c) no banco;
47     this.limpaTela();
48     //Limpa os campos após excluir os dados do banco;
49     this.carregaLista();
50     //Carrega a lista do combobox, atualizando após exclusão;
51    }
52   }else if(e.getActionCommand().equals(this.btnEditar.getActionCommand())){
53    //Caso o botão acionado seja Editar (ícone Lápis);
54    String[] options = {"Sim", "Não"};
55    //Cria variável tipo vetor para definir botão de seleção ativado por padrão;
56      int conf = JOptionPane.showOptionDialog(null, null, "CONFIRMA EDIÇÃO?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
57    //Cria variável tipo int com configuração de janela de diálogo de confirmação de edição;
58      if(conf == JOptionPane.YES_OPTION){
59     //Condicional: se a opção for SIM na confirmação...
60     Cliente c = this.montaCliente();
61     //Chama o método montaCliente para pegar os dados e gravar no objeto Cliente c;
62     ClienteCT cbc = new ClienteCT();
63     //Instancia a classe de controle ClienteCT;
64     cbc.update(c);
65     //Chama o método update da classe ClienteCT para atualizar dados do objeto Cliente (c) de montaCliente no banco;
66     this.limpaTela();
67     //Limpa os campos após atualizar os dados do banco;
68     this.carregaLista();
69     //Carrega a lista do combobox, atualizando após edição;
70    }
71   }
72  }
Confira no phpMyAdmin a gravação no banco:


phpMyAdmin


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

domingo, 23 de abril de 2017

Java Desktop, Cadastro CRUD - 5: JFrame

Eclipse
Nesta parte elaboramos a janela do sistema, com a classe JFrame.

 
Powered by Blogger