[RESOLVIDO]Ajuda com JTable

4 respostas
Tamba

Não sei o que ocorre, já li muita coisa sobre a JTable, e ela continua me batendo :slight_smile:

Seguinte, estou com um pequeno problema, gostaria que quando o usuario:

  • Apertasse seta pra baixo, ele descia entre as linhas do jtable, caso for a ultima linha, adiciona uma nova linha
  • Apertasse seta pra cima, ele subia entre as linhas do jatble, caso for a ultima linha, e ela estiver vazia, removia a ultima linha, sempre deixando a primeira linha.
tabela.addKeyListener(new KeyAdapter() {   
			public void keyPressed(KeyEvent e) {  
				if (e.getKeyCode()==KeyEvent.VK_DOWN) {
					adicionar();
				}
				if (e.getKeyCode()==KeyEvent.VK_UP) {	
					remover();	
				}
			}
		});

	public static void adicionar(){
		if (tabela.getSelectedRow() == tabela.getModel().getRowCount() -1) {  
			((ModeloJTable)tabela.getModel()).addRow(new String[]{"","",""}); 
		}
	}

	public static void remover(){
		ModeloJTable modelo = (ModeloJTable)tabela.getModel();
		int linhaSelecionada = tabela.getSelectedRow();
		System.out.print(linhaSelecionada);
		if (linhaSelecionada != 0){
			coluna = (String)modelo.getValueAt(linhaSelecionada, 0);
			if( linhaSelecionada < 0 ){
				JOptionPane.showMessageDialog(null, "Nenhuma linha selecionada", "Erro!", JOptionPane.ERROR_MESSAGE);
				return; 
			}else{
				modelo.removeRow(linhaSelecionada);
				tabela.getSelectionModel().setSelectionInterval(linhaSelecionada+1,linhaSelecionada+1);
			}
		} else {
			return;
		}
	}

Alguém pode me dar uma luz?

4 Respostas

filiperangel

Quando clicar com a seta para baixo, vc deve verificar se a linha selecionada é a ultima, faça o seguinte:

tabela.addKeyListener(new KeyAdapter() {     
          public void keyPressed(KeyEvent e) {    
              if (e.getKeyCode()==KeyEvent.VK_DOWN) {  
                  if(jTable1.getSelectedRow() == jTable1.getRowCount()-1)
                  {
                      //adicionar();
                  }
  
              }  
              if (e.getKeyCode()==KeyEvent.VK_UP) {      
                 remover();    
             }           
              }  
          }  
      });

Se eu descobrir a parada da seta para cima eu te falo.

Abraço!

Tamba

Bom, a parte da seta pra baixo esta funcionando, ele navega normal entre as linhas, e adiciona caso seja a ultima
o meu problema agora está na seta pra cima.
eu faço o remove row normal, porém ele exclui a primeira linha, e nao a ultima, mesmo eu informando o valor da ultima linha.

mto obrigado filiperangel.

Tamba

Achei o meu erro

o codigo está certo, porem a anta aqui, errou no metodo que remove a linha mesmo

estava usando

public void removeRow(int row){
		getLinhas().remove(0);
		fireTableRowsDeleted(row,row);
	}

em vez de

public void removeRow(int row){
		getLinhas().remove(row);
		fireTableRowsDeleted(row,row);
	}

Meu problema estava ake

remove(0);

ja estava informando o valor 0 (primeira linha), em vez de dizer que seria o valor da variavel =/

agredeço os q estavam tentando me ajudar, obrigado

filiperangel

Hehehe, agente quebra cabeça às vezes por coisa pouca que estamos fazendo errado.

Então ta firmeza, que bom que vc conseguiu resolver seu problema.

Forte abraço e até +!

Criado 1 de outubro de 2007
Ultima resposta 2 de out. de 2007
Respostas 4
Participantes 2