Tutorial:Dica para tabela Java

Bom pessoal, trago uma pequena dica que pelo menos para mim é muito útil. Uma maneira de criar uma tabela personalizada de maneira simples. Fiz isso pelo Netbeans.

Tentem seguir o passo a passo.

1°: Criem em seu projeto um novo JPanel. clica com direito no pacote > Novo > Form JPanel. Deixe ele com o tamanho da linha que você deseja, por exemplo, 600 de largura por 20 de altura. Dentro desse JPanel você vai colocar todas as informações que precisa. No meu caso eu coloquei Nome do Cliente, Valor devendo, Valor pago, Telefone e uma pequena foto de rosto.

2°: No construtor da classe do JPanel que acabamos de criar, você deve configurar para que ele receba o seu objeto, no meu caso ele recebe um objeto Cliente.

public class PCliente extends javax.swing.JPanel {
     private Cliente cli;
     public PCliente(Cliente cliente){
          cli = cliente;
     }
}

3°: Agora vamos setar os valores, por exemplo podemos colocar um método atualizar mais ou menos assim.

public void Atualiza(){
     jLabelNomeCliente = cli.getNome();
     jLabelFoneCliente = cli.getFone();
     ...
}

Agora a gente chama esse método atualiza quando precisarmos atualizar os dados dessa linha da tabela de maneira fácil. Entenderem mais ou menos o funcionamento já? Podemos assim criar uma “linha de tabela” totalmente personalizada.

4°: Vamos adicionar nossas linhas à nossa “tabela”.
Primeiro precisamos criar em nossa janela um JScrollPane, no Netbeans eu só arrasto ele pra janela e depois arrasto decidindo o tamanho dele. E agora vem a parte importante.

vamos criar um JPanel que vai receber nossas linhas de tabela.

JPanel tabela = new JPanel();
tabela.setMaximumSize(new Dimension(600,30000));
tabela.setMinimumSize(new Dimension(600,50));
tabela.setLayout(new BoxLayout(tabela, BoxLayout.PAGE_AXIS));

//Agora nós adicionamos as linhas.

for(int i = 0 ; i < arrayClientes.size ; i++){
     tabela.add(new PCliente(arrayClientes.get(i)));
}

//Adicionado todas as "linhas" à nossa tabela, vamos 
//agora exibir a tabela.

jScrollPaneMinhaTabela.add(tabela);
jScrollPaneMinhaTabela.setViewportView(tabela);

//E agora, somente como um detalhe, nós vamos
//aumentar a velocidade de movimento do scroll. Para ele
//se mover mais rapidamente.

jScrollPaneMinhaTabela.getVerticalScrollBar().setUnitIncrement(15);

Geralmente eu ainda coloco um efeito a mais nas minhas tabelas feitas dessa maneira que estou explicando. Eu costumo adicionar um efeito de iluminação quando passo a seta sobre a linha. No editor do meu JPanel que serve de linha, eu clico com o direito sobre ele e
Eventos > Mouse > mouseEntered
Nessa parte do código eu coloco

this.setBackground(new Color(204,255,255));

E coloco no evento de mouseExited

this.setBackground(new Color(238,238,238));

Assim, sempre que o mouse entra na linha ela fica um azul claro, e quando sai ela volta a cor normal. Quando eu preciso que ao clicar na linha, ela abra alguma outra janela, por exemplo, eu vou no editor do meu JPanel linha e adiciono à ele um evento de mouseReleased, então quando clico na linha da tabela e solto o botão, ele vai realizar uma função, por exemplo.

private void formMouseReleased(java.awt.event.MouseEvent evt) {                                   
        new Interfaces.TelaCliente(cli).setVisible(true);
}

E por ultimo mas não menos importante. Quando você adiciona muitas linhas à nossa “tabela”, as linhas vão ficar ok, mas se adicionar poucas, 1, 2, 3… O Layout BoxLayout vai esticar as linhas tentando preencher o espaço inteiro da jScrollPane. Para solucionar isso, basta que você coloque no seu JPanel linha os valores de setMaximumSize e setMinimumSize iguais ao setPreferredSize. Se todos esses valores foram iguais a sua linha não será mais redimensionada.

Pessoal, a dica que tenho para vocês é essa. Espero que tenha ficado claro o entendimento. Qualquer dúvida podem dizer que tentarei responder. Eu prefiro essa forma de trabalhar com “tabelas” pois assim tenho uma liberdade absurdamente maior quanto ao design da linha, podendo aditá-la facilmente. Por exemplo, na minha tabela de clientes, no canto do lado direito tem um quadrado pequeno, um JPanel que muda de cor para informar se o pedido já foi entregue ou não. Se tiver, fica verde, se não tiver entregue, fica laranja. Pode até ter uma forma de fazer isso em JTable, mas eu acho realmente muito fácil trabalhar assim.
Cada linha é um objeto independente que guarda dentro de si uma referência do objeto que vai trabalhar. Um cliente, por exemplo.

Se alguém conhecer uma maneira mais fácil de fazer esse tipo de coisa, diz ai.