Olá pesoal, pesquisei aqui no forum mas não consegui achar um exemplo que pudesse entender, fiz meu table model como o pessoal recomenda, gostaria de selecionar mais de uma linha na jTable e recuperar o valor, para apenas uma linha consigo perfeitamente com o codigo abaixo, mas estou em duvida em qual evento eu uso para poder selecionar mais de uma linha e como organizar isso.
AlunoDTO alunoDto = modeloAlunoDTO.getRow(jTableAluno.getSelectedRow());
idAluno = alunoDto.getIdAluno();
nomeAluno = alunoDto.getNome();
nomePai = alunoDto.getNomePai();
nomeMae = alunoDto.getNomeMae();
nomeResponsavel = alunoDto.getNomeResp();`
codigo abaixo do meu table model:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.projeto1.tabelmodel;
import com.escolanova.model.ControleMensalidade;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;
/**
*
* @author
*/
public class TabelModelControleMensalidade extends AbstractTableModel {
// lista que vai conter todos os dados do JTable
private List<ControleMensalidade> dataset;
private static final String[] col = {"Valor", "Desconto", "Data Vencimento"};
// Construtor da classe recebe os dados a ser populado
public TabelModelControleMensalidade(List<ControleMensalidade> bean) {
dataset = new ArrayList<ControleMensalidade>(bean);
fireTableStructureChanged();
}
public TabelModelControleMensalidade() {
dataset = new ArrayList<ControleMensalidade>();
fireTableStructureChanged();
}
// Método sobrescrito que retorna o número de linhas do JTable, após populado
@Override
public int getRowCount() {
return dataset.size();
}
// Método sobrescrito que retorna o número de colunas do JTable após populado
@Override
public int getColumnCount() {
return col.length;
}
// Método sobrescrito que vai popular e retornar cada célula do JTable
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
ControleMensalidade cbean = dataset.get(rowIndex);
Object row = null;
switch (columnIndex) {
case 0:
row = cbean.getValorMensalidade();
break;
case 1:
row = cbean.getDesconto();
break;
case 2:
//formata data na tabela
SimpleDateFormat formata = new SimpleDateFormat("dd/MM/yyyy");
row = formata.format(cbean.getDataVencimento());
break;
case 3:
row = cbean.getIdAluno();
break;
case 4:
row = cbean.getIdControleMensalidade();
break;
}
return row;
}
/* Este método sobrescrito, defini se o JTable será editável ou não.
Voce pode definir qual coluna de qual linha será editável. Caso voce
defina que o seu JTable seja editável, então é necessário definir também
o método "setValueAt" que vem logo a seguir, caso contrário, é só retornar
false para todas as linhas e colunas, como definido abaixo. */
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// return true;
return false;
}
/* Este método sobrescrito, permite voce editar o JTable, caso o método anterior
tenha algumas colunas de algumas ou todas linhas editáveis setadas para true,
ou que tenha como retorno o valor true para todas as linhas e colunas. */
@Override
public void setValueAt(Object value, int row, int col) {
ControleMensalidade dado = dataset.get(row);
switch (col) {
case 0:
dado.setValorMensalidade((Double) value);
break;
case 1:
dado.setDesconto((Double) value);
break;
case 2:
dado.setDataVencimento((Date) value);
break;
case 3:
dado.setIdAluno((Long) value);
break;
case 4:
dado.setIdControleMensalidade((Long) value);
break;
}
fireTableCellUpdated(row, col);
}
// Este método sobrescrito define que tipo de dado será retornado para cada coluna
@Override
public Class getColumnClass(int column) {
if (column == 0) {
return double.class;
}
if (column == 1) {
return double.class;
}
if (column == 2) {
return String.class;
} else {
return long.class;
}
}
/* Este método criado por nós, vai retornar o conjunto
de dados inteiro do JTable, através de um List contendo
Objetos ClienteBean populados. */
public List<ControleMensalidade> getDataSet() {
return dataset;
}
/* Este método sobrescrito vai definir o nome das colunas
que foi atribuído na constante "col" logo no início da classe */
@Override
public String getColumnName(int column) {
return col[column];
}
/* Este método foi criado por nós para retornar um objeto ClienteBean
populado, de acordo com o número de linha do JTable fornecido pelo
parâmetro "int row" */
public ControleMensalidade getRow(int row) {
return dataset.get(row);
}
/* Este método criado por nós, serve para voce criar um
ClienteBean e populá-lo fora do JTable e passar para este
método que vai acrescentar os dados na última linha do JTable
sem que haja a necessidade de se usar o método "setValueAt(...)" */
public void addRow(ControleMensalidade bean) {
dataset.add(bean);
fireTableDataChanged();
}
/* Este método foi criado por nós para remover uma linha
específica do JTable, de acordo com linha fornecida pelo
parâmetro "int row" */
public void removeRow(int row) {
dataset.remove(row);
fireTableDataChanged();
}
/* Este método criado por nós, acrescenta uma linha em branco
no JTable, caso voce queira inserir dados diretamente no JTable
tem que chamar este método antes. */
public void addEmptyRow() {
dataset.add(new ControleMensalidade());
fireTableDataChanged();
}
// metodo criado para limpar todos os dados da tabela.
public void clearRow() {
dataset.clear();
fireTableDataChanged();
}
}