Para não tivermos que apenas logar clicando no botão entrar, podemos adicionar um evento para que ele clique numa tecla para isso.
Voltando à TelaLogin, vá no campo senha, e nos eventos, vá em Key e keyPressed, e coloque dentro dele uma condição para realizar a função ao clicar enter:
private void txtSenhaKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) { // Importe
// Aqui os códigos executados serão colocados.
}
}
Veja que existe opções para trabalhar com todas as teclas, o que nos dá várias possibilidades.
Podemos criar uma função e apenas a invocar nos métodos do action do botão e do press do teclado, assim:
private void logar() {
if(txtLogin.getText().trim().equals("usuario") && String.valueOf(txtSenha.getPassword()).trim().equals("1234")) {
JOptionPane.showMessageDialog(null, "Bem-vindo", "Login", JOptionPane.INFORMATION_MESSAGE); // Importe javax.swing.JOptionPane
}
else {
JOptionPane.showMessageDialog(null, "Acesso Negado", "Login", JOptionPane.ERROR_MESSAGE);
}
}
private void btnEntrActionPerformed(java.awt.event.ActionEvent evt) {
this.logar();
}
private void txtSenhaKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
this.logar();
}
}
Podemos também, no lugar do método logar, um método para checkagem, que retorna true ou false, assim:
private boolean checkagem(String login, String senha) {
return login.equals("usuario") && senha.equals("1234");
}
private void btnEntrActionPerformed(java.awt.event.ActionEvent evt) {
if(this.checkagem(txtLogin.getText().trim(), String.valueOf(txtSenha.getPassword()).trim())) {
JOptionPane.showMessageDialog(null, "Bem-vindo", "Login", JOptionPane.INFORMATION_MESSAGE); // Importe javax.swing.JOptionPane
}
else {
JOptionPane.showMessageDialog(null, "Acesso Negado", "Login", JOptionPane.ERROR_MESSAGE);
}
}
private void txtSenhaKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
if(this.checkagem(txtLogin.getText().trim(), String.valueOf(txtSenha.getPassword()))) {
JOptionPane.showMessageDialog(null, "Bem-vindo", "Login", JOptionPane.INFORMATION_MESSAGE); // Importe javax.swing.JOptionPane
}
else {
JOptionPane.showMessageDialog(null, "Acesso Negado", "Login", JOptionPane.ERROR_MESSAGE);
}
}
}
Lembrando que o método getPassword() pega dados e joga num array de char, sendo necessário a conversão para String. Os métodos de login são recomendados ser colocados numa classe separada.
Crie um frame com o nome ViewJTable, centralize, coloque o título e tudo mais, e nele crie um painel e cubra até um pouco menos da metade superior, nele coloque os labels e os campos para descrição, quantidade e preço, e um botão para cadastrar (variáveis dos campos serão txtDesc, txtQtd e txtPrec, e do botão será btnCadr).
Crie um painel na parte de baixo e coloque uma tabela (variável paneProds) dentro dele e a redimensione, clique nela e com o botão direito, vá em conteúdo da tabela e em colunas, edite os nomes para Descrição, Quantidade e Preço (mantenha os tipos em Object, pois trabalharemos com objetos), tire a opção editável e exclua as colunas extras. No mesmo local, em linhas, exclua todas.
PS: As tabelas já são incluídas com um painel de rolagem, não sendo necessário colocar outra.
No action performed do Cadastrar, coloque esse código:
private void btnCadrActionPerformed(java.awt.event.ActionEvent evt) {
if(!txtDesc.getText().trim().equals("") && !txtQtd.getText().trim().equals("") && !txtPrec.getText().trim().equals("")) {
DefaultTableModel dtmProds = (DefaultTableModel)paneProds.getModel(); // Isso pega o modelo da tabela, importe javax.swing.table.DefaultTableModel
Object dados[] = {txtDesc.getText().trim(), txtQtd.getText().trim(), txtPrec.getText().trim()}; // Isso pega os dados dos campos.
dtmProds.addRow(dados); // Isso envia os dados pra tabela.
// Essas linhas apagam os dados escritos nos campos:
txtDesc.setText("");
txtQtd.setText("");
txtPrec.setText("");
}
else {
JOptionPane.showMessageDialog(null, "Preencha todos os campos!", "Aviso", JOptionPane.WARNING_MESSAGE); // Importe javax.swing.JOptionPane
}
}
Para remover os dados do JTable, precisaremos criar na table um botão com o nome excluir e variável btnExcl
Para recebermos o item clicado da tabela, usamos o método getSelectedRow()
, que recebe a posição do produto clicado (ao não clicarmos em nada, retorna -1, a contagem das linhas começa do 0), veja abaixo um exemplo de uso, no action performed botão btnExcl para testes:
private void btnExclActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("Linha selecionada: " + paneProds.getSelectedRow());
}
Entendendo como funciona, altere o método do Action Performed do btnExcl dessa forma:
private void btnExclActionPerformed(java.awt.event.ActionEvent evt) {
if(paneProds.getSelectedRow() != -1) {
DefaultTableModel dtmProds = (DefaultTableModel)paneProds.getModel(); // Importe javax.swing.table.DefaultTableModel
dtmProds.removeRow(paneProds.getSelectedRow());
txtDesc.setText("");
txtQtd.setText("");
txtPrec.setText("");
}
else {
JOptionPane.showMessageDialog(null, "Selecione algum item para excluir!", "Aviso", JOptionPane.WARNING_MESSAGE); // Importe javax.swing.JOptionPane
}
}
Primeiro coloque na tabela um botão atualizar (variável btnAtu).
Agora clique na tabela, em propriedades, vá nos eventos, em mouse e em mouse clicked, e coloque esse código:
private void paneProdsMouseClicked(java.awt.event.MouseEvent evt) {
if(paneProds.getSelectedRow() != -1) {
txtDesc.setText(paneProds.getValueAt(paneProds.getSelectedRow(), 0).toString()); // Os números referentes são o da linha, passado pelo getSelectedRow(), e o da coluna, contados a partir do 0.
txtQtd.setText(paneProds.getValueAt(paneProds.getSelectedRow(), 1).toString());
txtPrec.setText(paneProds.getValueAt(paneProds.getSelectedRow(), 2).toString());
}
else {
txtDesc.setText("");
txtQtd.setText("");
txtPrec.setText("");
}
}
PS: Pode colocar o mesmo código em Key e KeyReleased, que selecionará o item ao navegarmos com as setas do teclado.
Para atualizar, colocamos isso no action performed do botão atualizar:
private void btnAtuActionPerformed(java.awt.event.ActionEvent evt) {
if(paneProds.getSelectedRow() != -1) {
paneProds.setValueAt(txtDesc.getText().trim(), paneProds.getSelectedRow(), 0);
paneProds.setValueAt(txtQtd.getText().trim(), paneProds.getSelectedRow(), 1);
paneProds.setValueAt(txtPrec.getText().trim(), paneProds.getSelectedRow(), 2);
}
else {
JOptionPane.showMessageDialog(null, "Selecione algum item para atualizar!", "Aviso", JOptionPane.WARNING_MESSAGE); // Importe javax.swing.JOptionPane
}
}
Para ordenar os itens por colunas, vamos no construtor e coloque esse código:
public ViewJTable() {
initComponents();
DefaultTableModel mode = (DefaultTableModel)paneProds.getModel(); // Importe javax.swing.table.DefaultTableModel
paneProds.setRowSorter(new TableRowSorter(mode)); // Importe javax.swing.table.TableRowSorter
}
O método setRowSorter() é o que permite nos fazer a ordenação por coluna.
Para criarmos uma forma de upar arquivos pelo Java, crie um frame com o nome TelaJFileChooser, faça os ajustes de centralizar e etc., e coloque um campo de texto e um botão, com as variáveis txtFile e btnArqu. Coloque também um label abaixo sem nada, com a variável lblImg, para nossa imagem upada aparecer.
Esse é o código do botão upload:
private void btnArqActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser arquivo = new JFileChooser(); // Importe javax.swing.JFileChooser
arquivo.setDialogTitle("Procurar Arquivos"); // Isso colocará um título na janela que abrirá para selecioar arquivos.
arquivo.setFileSelectionMode(JFileChooser.FILES_ONLY); // Isso escolhe se selecionará pastas ou pastas e arquivos.
FileNameExtensionFilter filtro = new FileNameExtensionFilter("Imagem", "jpg", "jpeg", "png", "gif"); // Isso cria o filtro dos tipos de arquivos para upload. Importe javax.swing.filechooser.FileNameExtensionFilter
arquivo.setFileFilter(filtro); // Isso filtra os arquivos.
int retorno = arquivo.showOpenDialog(this); // Isso abrirá a janela para selecionar arquivos do computador. A variável não é necessária para isso, somente para definir a condição do if abaixo.
if(retorno == JFileChooser.APPROVE_OPTION) { // Isso verifica o tipo de arquivo selecionado.
File arq = arquivo.getSelectedFile(); // Isso pega o caminho do arquivo, importe java.io.File
txtFile.setText(arq.getPath()); // Isso pega o endereço e muda o texto do campo.
lblImg.setIcon(new ImageIcon(arq.getPath())); // Isso mudará a imagem do label, importe import javax.swing.ImageIcon;
}
}
PS: Caso não queira que seja editável o campo de texto, coloque no construtor o método setEditable(false)
, dessa forma:
public TelaJFileChooser() {
initComponents();
txtFile.setEditable(false);
}
De forma mais fácil, podemos ir nas propriedades do campo e desmarcar a caixa "Editável".
Com isso, já podemos enviar arquivos para algum servidor ou pasta.
Crie um frame com o nome TelaSlider, configure ela e coloque um controle deslizante e um label para mostrar os dados, com as variáveis sliNum e lblNum.
Nas propriedades, você pode estar alterando os valores em minimum, maximum e value (que define o valor default), e em operation podemos escolher se o slider será horizontal ou vertical.
Para ele pegar os valores do slider, vá em propriedades, Change e stateChange, e coloque esse código:
private void sliNumStateChanged(javax.swing.event.ChangeEvent evt) {
lblNum.setText(String.valueOf(sliNum.getValue()));
}
Crie um frame com o nome TelaSpinner, e coloque um label, um spinner e um botão, com as variáveis spNum e btnNum. Coloque os valores mínimos de 0 e máximo de 10, e coloque esse código no método de evento do botão:
private void btnNumActionPerformed(java.awt.event.ActionEvent evt) {
String exten[] = {"zero", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez"};
int num = (int)spNum.getValue();
JOptionPane.showMessageDialog(null, String.format("O valor de %d por extenso é \"%s\".", num, exten[num]), "Info", JOptionPane.INFORMATION_MESSAGE); // Importe javax.swing.JOptionPane
}
O tema padrão do Java Swing é o "Nimbus", mas ele pode ser alterado, procure no código do frame, dentro do método main, alguma linha tipo essa:
if("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
No lugar onde está escrito "Nimbus", podemos alterar o nome do que é passado lá pra mudar o tema.
Alguns dos temas possíveis de serem usados além do "Nimbus" são o "Windows" (pra ficar mais parecido com o tema do C#), o "Windows Classic", o "Metal", o "GTK+", o "Mac OS X" e o "CDE/Motif" (atenção pras maiúsculas e minúsculas). Também é possível criar e baixar temas específicos.
Para mudar a imagem do JFrame, basta colocar isso no JFrame (substituindo pela imagem salva no pacote):
public TelaLogin() {
initComponents();
this.setIconImage(new javax.swing.ImageIcon(getClass().getResource("/images/user.png")).getImage());
}
O código que vai dentro do setIconImage() também pode ser colocado nas propriedades, em iconimage e código personalizado, que seria colocado isso:
new javax.swing.ImageIcon(getClass().getResource("/images/user.png")).getImage()