Como pegar JTextField de um JTable

4 respostas
J
Meu problema é o seguinte, coloquei varios JTextFields,JComboBox dentro de uma JTable, mas ao tentar pegar o JTextField, esta dando erro.

Pegar o valor não serve, preciso do componente mesmo.

Segue o codigo:

//Colocar JTextField dentro da JTable

JTextField jtf = new JTextField();

jtbProdutos.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(jtf));
//Recuperar o valor da JTable

DefaultCellEditor dce = (DefaultCellEditor) jtbProdutos.getCellEditor(0, 3); //Linha 0,coluna 3

Component compo = dce.getComponent();

String text = ((JTextField) compo).getText();

Se eu adicionar uma linha no JTable e tentar pegar o componente retorna vazio, mas se eu adicionar uma linha e clicar dentro da celula que quero o valor ai então eu consigo retornar o valor.
Mas supondo que eu adicionei uma linha na JTable e cliquei na coluna 4 ele me retorna o valor da coluna 4 mesmo se no codigo eu colocar o index 3. A JTable me retorna o valor do ultimo indice que eu cliquei.
Alguem ai tem ideia de como resolver issu ???
Vlw.

4 Respostas

Ziguifrid

Faça assim:

try{

int colunaSelecionada = tabela.getSelectedColumn();
int linhaSelecionada = tabela.getSelectedRow();

if(colunaSelecionada == 3 && linhaSelecionada ==0){

DefaultCellEditor dce = (DefaultCellEditor) tabela.getCellEditor(0, 3); //Linha 0,coluna 3
Component compo = dce.getComponent();
String text = ((JTextField) compo).getText();

System.out.println("Texto: "+text);

}


        }
catch (Exception e){
    System.out.println(e.getMessage());
}
ViniGodoy

Nossa, quanta gambi em um único post. Para que você quer o JTextField?
Geralmente, você só precisa dos dados do model e não deveria ir atrás do editor para chamar o método “getText()”.

Ainda que você precise do editor para alguma coisa, talvez fosse melhor você já guarda-lo externamente.

J

ViniGodoy:
Nossa, quanta gambi em um único post. Para que você quer o JTextField?
Geralmente, você só precisa dos dados do model e não deveria ir atrás do editor para chamar o método “getText()”.

Ainda que você precise do editor para alguma coisa, talvez fosse melhor você já guarda-lo externamente.

O problema nem é o JTextField, o problema é que eu jogo alguns combos dentro da Jtable, mas esses combos possuem o codigo oculto e para pegar o codigo eu preciso do componente, pois nao consigo acessa-lo diretamente.

Utilizo o seguinte para pegar o codigo do combo: String.valueOf(((combo) combobox.getSelectedItem()).getKey());
Eu queria pegar o valor diretamente sem ter que executar outro sql para pegar o codigo atraves da descricao.

ViniGodoy

Ainda assim. Seu combo não é um editor? Esse editor não altera o valor do model?
Por que o seu model não contém essa informação?

Criado 1 de agosto de 2010
Ultima resposta 5 de ago. de 2010
Respostas 4
Participantes 3