JTAble, como pegar o conteúdo atualizado de uma célula?

4 respostas
R

estou tentando pegar o conteúdo atualizado de uma célula do JTable, mas sempre retorna o conteúdo antigo.
Na célula (0,0) tenho na coluna nome o continente “América”, altero para “América teste” quando teclo o enter me retorna “América” e não “América teste”.
Aí vai o código:

//método que cria minha jtable;   
  public JTable Lista_Continentes() {
    ArrayList dados_Continentes = new ArrayList();
    String[] colunas_Continentes = new String[] { "Nome", "Codigo" };

    try {  
      conexao.conecta_Utils();
      cQuerySql = "SELECT * FROM CONTINENTES ORDER BY CTN_NOME";
      pstm = conexao.con.prepareStatement(cQuerySql);  
      resultado_RS = pstm.executeQuery();
      while (resultado_RS.next()) {
        dados_Continentes.add(new String[] {resultado_RS.getString("CTN_NOME"),resultado_RS.getString("CTN_CODIGO") });
      }      
    } catch(Exception e){
        JOptionPane.showMessageDialog(null, "Erro ao listar os Continentes.", "Mensagens", JOptionPane.INFORMATION_MESSAGE);
        System.out.println(e.getMessage());
      }  
    fecha_Conexoes();
    boolean [] edicao = {true, false};
    SimpleTableModel modelo = new SimpleTableModel(dados_Continentes, colunas_Continentes, edicao);
    jtb_Continentes = new JTable((TableModel) modelo);
    jtb_Continentes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    return jtb_Continentes;
  }

  // método que estou usando para pegar o valor da célula após teclar o enter. Só para exemplificar deixei a linha e coluna no 0,0;
  private void jtb_ContinentesKeyReleased(KeyEvent e) {
    String Conteudo = "";
    Conteudo = ((String) jtb_Continentes.getValueAt(0,0));
    if (e.getKeyCode() == KeyEvent.VK_ENTER){
       JOptionPane.showMessageDialog(null, Conteudo1, "Mensagens", JOptionPane.INFORMATION_MESSAGE);
    }
  }

4 Respostas

J

e aí rsajava, tranquilo?

seguinte cara… já tentou usar um TableModel para esta tua JTable?

Se você implementar sua própria TableModel fica bem mais fácil de manipular sua JTable

Dê uma olhada na implementação de DefaultTableModel, você entenderá como funciona. Existem métodos implementados para
atribuir valores às células e resgatar valores digitados. Você até pode utilizar a DefaultTableModel nesta sua JTable, porém o mais indicado seria você implementar sua própria…

Qualquer dúvida estamos aí…

R

estou seguindo o exemplo de um artigo aqui do grupo. Realmente lá tem um método que substitui o conteúdo, mas não tentendi como utiliza-lo

// Método para subtituir um valor por outro em uma determinada coluna.
	public int substituirValor(String oldValue, String newValue, int column){
		int total = 0;
		// Obtem o modelo da JTable
		DefaultTableModel modelo = (DefaultTableModel)getTabela().getModel();
		// Faz um looping em cima das linhas do modelo
		for( int linha=0; linha<modelo.getRowCount(); linha++){
			// Obtem o valor atual na coluna
			String valorAtual = (String)modelo.getValueAt(linha, column);
			if( valorAtual.equals(oldValue) ){
				// Substitui pelo novo valor na linha e coluna
				modelo.setValueAt(newValue, linha, column);
				// Adiciona mais um no numero de linhas atualizadas            
				total++;
			}
		}
		return total;
	}
J

veja bem... rs....

DefaultTableModel modelo = (DefaultTableModel)getTabela().getModel();

Veja que na classe DefaultTableModel tem os seguintes métodos:

public Object getValueAt(int row, int col){
} // -> este método é utilizado para passar os valores dos seus objetos para células das tabelas

e 

public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 
} // -> este método é utilizado para passar os valores das células para seus objetos

Dê uma olhadinha na classe AbstractTableModel....
Crie sua própria TableModel extendendo de AbstractTableModel. Implementando os métodos necessários e utilize na sua JTable

Abraço.

B

cara, olhando seu código, pq no método em q vc usa pra mostrar o conteudo da célula tem um “Conteudo1” se a string q vc usa para pegar o conteúdo atualizado é “Conteudo”?

Criado 17 de setembro de 2008
Ultima resposta 17 de set. de 2008
Respostas 4
Participantes 3