Java Tips: Operações com JTable parte 3
Introdução
Vamos mostrar mais algumas dicas interessantes da class JTable do Java. Outras dicas do JTable podem ser encontradas nos posts anteriores:
Java Tips: Operações com JTable parte 1
Java Tips: Operações com JTable parte 2
- Manipulando o conteúdo da tabela
- Tratando evento de mudança de dados na tabela
- Usando ComboBox (JcomboBox) nas células da sua tabela
// inserindo dados em uma tabela com 4 colunas DefaultTableModel tableModel = (DefaultTableModel) minhaTabela.getModel(); tableModel.insertRow(tableModel.getRowCount(), new Object[]{ "Douglas", "Villanacci", "douglas.pasqua@gmail.com", "11111111"}); tableModel.insertRow(tableModel.getRowCount(), new Object[]{ "Fulano", "da Silva", "fulano.silva@blalbla.com", "11111111"}); // limpando todo o conteúdo da tabela DefaultTableModel tableModel = (DefaultTableModel) minhaTabela.getModel(); tableModel.getDataVector().removeAllElements(); minhaTabela.updateUI(); // alterando o valor de determinada linha e coluna da tabela: Linha (1), Coluna (1) // linha e coluna começam com valor 0 TableModel model = (TableModel) minhaTabela.getModel(); model.setValueAt("Josefina", 0, 0); // obtendo valor de determinado campo na tabela, informando Linha(2) e Coluna(1) // linha e coluna começam com valor 0 TableModel model = (TableModel) minhaTabela.getModel(); String value = (String) model.getValueAt(1, 0); System.out.println(value);
Caso você tenha campos editáveis na sua tabela, você pode em algum momento querer executar alguma ação quando um valor de um campo da sua tabela sofrer alterações.
Para que você possa controlar as mudanças realizadas na edição da sua tabela, é necessário monitorar o evento de alteração através do listener TableModelListener.
// monitorando o evento através de TableModelListener minhaTabela.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { int linha = e.getFirstRow(); int coluna = e.getColumn(); TableModel model = (TableModel) e.getSource(); System.out.println("Você alterou a linha " + linha + ", coluna " + coluna); System.out.println("Valor da célula alterada: " + model.getValueAt(linha, coluna)); } });
É possível associar um JComboBox (caixa de seleção) à uma coluna da sua tabela. É uma forma de facilitar a vida do usuário. Ao invés do usuário digitar um valor para a célula, ele simplesmente escolhe um valor dentre vários, através de uma caixa de seleção. Recurso bem interessante e elegante.
No exemplo abaixo, vamos associar um combo box para a quinta coluna da tabela. (Lembre-se que a numeração das colunas começa por 0). O usuário poderá escolher entre “Masculino” ou “Feminino”:
// Obtendo à referencia para a 5 coluna da tabela TableColumn column = minhaTabela.getColumnModel().getColumn(4); // Criando o ComboBox JComboBox comboSexo = new JComboBox(); // Definindo os valores para o ComboBox DefaultComboBoxModel comboModel = new DefaultComboBoxModel(new String[] { "Masculino", "Feminino" }); comboSexo.setModel(comboModel); // Associando o ComboBox para a coluna column.setCellEditor(new DefaultCellEditor(comboSexo));
Veja ilustração: