Para abordar tudo isso, uma aplicação exemplo em Swing fará uso de um JTable para exibir e editar os registros de uma tabela do banco de dados.
O JTable é um componente de interface gráfica que permite manipular planilhas (tabelas) de dados, possibilitando ao usuário informar o valor de cada célula a fim de preencher/atualizar a tabela.
Como este é um componente para exibição de tabelas, ele não realiza a persistência dos dados. Assim, quando a GUI é fechada, os dados informados no JTable são perdidos.
Com o objetivo de tornar os dados exibidos no JTable persistentes e, ao mesmo tempo, oferecer uma interface gráfica fácil para inserir, editar e excluir registros, este artigo propõe a construção de uma aplicação exemplo que tem o intuito de gerenciar uma tabela de cursos de um banco de dados qualquer usando os componentes da API Swing, focando, principalmente, no componente JTable, para realização da entrada de dados na tabela e exibição dos registros.
A API Swing é parte do conjunto das classes básicas da linguagem Java chamado de Java Foundation Classes (JFC). Este oferece uma série de pacotes com classes que servem de apoio para os mais diversos tipos de aplicações, onde está contido o Swing, que foi criado para ser uma opção ao AWT (Abstract Window Toolkit), oferecendo componentes GUI com melhor aparência gráfica e com mais opções disponíveis para customização.
Sendo um componente do Swing, o JTable é inteiramente customizável e oferece métodos para acessar, inserir e excluir registros, adicionar listeners (eventos) e outras funções como edição de propriedades das células da tabela.
A partir desses recursos, e pensando na exibição de dados recuperados de um banco de dados, podemos utilizar listeners para chamar métodos específicos de acordo com cada tipo de iteração do usuário com o JTable, possibilitando assim manter os dados do banco e do componente sincronizados.
Os principais construtores e métodos da classe JTable são:
· JTable(): Constrói um novo JTable que é inicializado com o modelo de dados default, modelo de coluna default e modelo de seleção default;
· JTable(int numRows, int numColumns): Constrói um novo JTable com o número de linhas e colunas indicados e preenche a tabela com células vazias;
· JTable(Object[][] rowData, Object[] columnNames): Constrói um novo JTable com o array de dados e os nomes de colunas indicados;
· JTable(TableModel dm): Constrói um novo JTable usando o modelo de tabela indicado;
· JTable(TableModel dm, TableColumnModel cm): Constrói um novo JTable com o modelo de tabela e o modelo de coluna indicados;
· JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm): Constrói um novo JTable usando o modelo de tabela, modelo de coluna e modelo de seleção indicados;
· JTable(Vector rowData, Vector columnNames): Constrói um novo JTable usando os nomes das colunas indicadas no vetor columnNames e os dados contidos no vetor rowData;
· void addColumn(TableColumn coluna): Adiciona uma nova coluna no JTable;
· void clearSelection(): Desmarca a seleção de qualquer linha ou coluna;
· int getEditingColumn(): Retorna o índice da coluna sendo editada;
· int getEditingRow(): Retorna o índice da linha sendo editada;
· Class getColumnClass(int column): Retorna a classe da coluna, ou seja, retorna a classe possível de ser aplicada naquela coluna;
· public TableColumnModel getColumnModel(): retorna o modelo de coluna da tabela;
· TableModel getModel(): Retorna o modelo da tabela que está sendo usado para a exibição dos dados da tabela;
· ListSelectionModel getSelectionModel(): Retorna o ListSelectionModel associado ao JTable;
· Object getValueAt(int row, int column): Retorna o valor da célula dada a linha e a coluna;
· boolean isEditing(): Retorna true se existe uma célula sendo editada;
· void moveColumn(int column, int targetColumn): move a coluna indicada para a posição indicada;
· void setColumnModel(TableColumnModel columnModel): Permite definir o modelo de colunas;
· void setColumnSelectionAllowed(boolean columnSelectionAllowed): Define se colunas inteiras podem ser selecionadas;
· void setColumnSelectionInterval(int index0, int index1): Seleciona colunas no intervalo de index0 para index1 (inclusive);
· void setModel(TableModel dataModel): Define o modelo da tabela;
· void setSelectionMode(int selectionMode): Define o modelo de seleção de colunas, que pode ser coluna simples, um intervalo de colunas ou múltiplos intervalos;
· void setSelectionModel(ListSelectionModel newModel): Define o modelo de seleção de colunas;
· void setShowGrid(boolean showGrid): Define se é desenhada a grade de linhas ao redor das células da tabela;
· void setValueAt(Object aValue, int row, int column): Define o valor da célula na linha e coluna indicadas, atualizando o TableModel usado;
· void tableChanged(TableModelEvent e): Permite definir um listener (TableModelEvent) que é chamado no caso de modificação do JTable.
Através dos métodos apresentados, pode-se verificar que JTable é uma classe gerenciável através do uso de interfaces e uma das principais é a TableModel. Esta define métodos para realizar a manipulação das células da tabela, como acessar o valor e as devidas propriedades, incluindo também o acesso aos nomes das colunas.
Os principais métodos da interface TableModel são:
· void addTableModelListener(TableModelListener l): Adiciona um listener à tabela que é chamado quando ocorre uma modificação em uma célula;
·
Class getColumnClass(int
columnIndex): Retorna
a classe mais comum em todas as células daquela coluna, pois os campos podem
ser de diferentes tipos ...