Selecionar várias linhas não contínuas em jTable

Olá pessoal! :wink: :wink:

Eu uso o isso para selecionar uma linha na jTable:

Frame.tableGaragem.setRowSelectionInterval(1,1);

Neste exemplo estou selecionando a linha 1. Se eu colocar várias posições como essa (repetindo esse trecho dentro de um laço), sempre vai ficar a última. Sei que eu poderia colocar a primeira e a última linha a ser selecionada, mas como selecionar linhas sortidas?
Por exemplo: Tenho uma jTable com 100 linhas, quero selecionar a linha 0, 50 e 100.

:?: :?: :?: :?: :?: :?: :?:

Valeu gente! :thumbup: :thumbup: :thumbup: :thumbup: :thumbup:

Uma coisa, se sua tabela tem 100 linhas você não vai selecionar a 100 e a 50, mas sim a 99 e a 49, para selecionar essas 3 linhas (como no seu exemplo você pode fazer assim), você tem que trabalhar no modelo de seleção e não sobre a tabela em si:

Veja que o primeiro bloco você usa o setSelectionInterva mesmo, já nos subsequentes você usa addSelectionInterval:

ListSelectionModel selectionModel = suaTabela.getSelectionModel(); selectionModel.setSelectionInterval(0, 0); selectionModel.addSelectionInterval(49, 49); selectionModel.addSelectionInterval(99, 99);

Espero que resolva seu problema.

Valeu aê javer…
Funcionou…
Há…eu sei que não há indice 100 em uma tabela de 100 linhas pois o indice começa em 0. O exemplo foi um modo de dizer…

Mas valeu! :thumbup: :thumbup: :thumbup:

Funcionar até funcionou…mas quando roda dentro de um laço não dá certo…

[code]
public static void procurarHistorico(String placaProcurar)
{
DefaultTableModel dtm = (DefaultTableModel)Frame.tableHistorico.getModel();
int linhas = Frame.tableHistorico.getRowCount();
int indiceLocalizado=-1;
ListSelectionModel selectionModel = Frame.tableHistorico.getSelectionModel();
for (int i=0;i<linhas;i++)
{

			if (dtm.getValueAt(i,1).equals(placaProcurar))
			{
				  selectionModel.setSelectionInterval(i,1);  
				  indiceLocalizado = i;
			}
		}
		if (indiceLocalizado<0)
		JOptionPane.showMessageDialog(null,"Este veículo não está no histórico.", "Veículo inexistente", JOptionPane.INFORMATION_MESSAGE);
		
}[/code]

Ele está sempre selecionando a última linha de todas que deveriam ser selecionadas.

Esse código tá meio estranho pra mim, por exemplo, uma placa vai estar em mais de uma linha da tabela?
Se pode então tem mais de um carro com a mesma placa?
Se for uma única placa por linha da tabela você deveria mudar seu looping um pouco.
Eu não entendi porque você precisava selecionar intervalos de linhas não continuos.

for (int i = 0; i < linhas; i++) { if (((String) dtm.getValueAt(i, 1)).equals(placaProcurar)) { selectionModel.setSelectionInterval(i, i); // aqui tem que ser de i até i e não até 1 indiceLocalizado = i; break; // se a placa aparecer uma unica vez então não precisa continuar o looping } }
Procure usar um AbstractTableModel ao invés do DefaultTableModel, ele é muito mais flexível.

No histórico de carros que já usaram o estacionamento pode haver repetição…
Dê uma olhada no print que tirei…



Essa parte quer dizer que deve-se procurar sempre nas células da segunda coluna e na linha i

Essa parte quer dizer que deve-se procurar sempre nas células da segunda coluna e na linha i

Já vejo um exemplo e te envio, tou meio ocupado agora, mas assim que der um tempinho aqui eu te mando.

OK!
Valeu javer!!!

Ok amigo, como eu havia falado tive um tempo e fiz um pequeno exemplo, no meu exemplo estou usando uma tabela que mostra notas fiscais a serem impressas.
Fiz o exemplo para selecionar todas as linhas que o número da nota fiscal seja par, em cima disso você pode adaptar para sua necessidade.
Veja que no exemplo eu controle a primeira inserção porque a partir do primeiro intervalo você adiciona novos intervalos a seleção.

ListSelectionModel selectionModel = tabelaNotas.getSelectionModel(); selectionModel.setSelectionMode(selectionModel.MULTIPLE_INTERVAL_SELECTION); int rows = tabelaNotas.getRowCount(); boolean primeiro = false; for(int i=0; i<rows; i++){ int numeroNota = (Integer)tabelaNotas.getModel().getValueAt(i, 1); // selecionar a linha quando o numero da nota fiscal for par if(numeroNota % 2 == 0){ System.out.println("Numero Par: "+numeroNota); if(!primeiro){ // o primeiro intervalo deve ser feito com setSelectionInterval(i, i) selectionModel.setSelectionInterval(i, i); primeiro = true; System.out.println("Adiconou o primeiro: "+i); } else { // a partir do segundo tem que ser feito com addSelectionInterval(i, i) selectionModel.addSelectionInterval(i, i); System.out.println("Adicionando a partir do segundo: "+i); } } }
Espero que te sirva

:thumbup: :thumbup: :thumbup: :thumbup: Valeu javer!!! Funcionou perfeito!!! :thumbup: :thumbup: :thumbup: :thumbup:

Ótimo, fico contente que funcionou.

Abraços
Francisco