Aew galera, preciso de mais uma ajuddinha de vcs…
Hj de manha o vini me ajudou a criar um ComboBox dentro de um JTable… e ta funcionando perfeitamente…
o problema é que se eu clico no botao salvar sem clicar em outro lugar da tabela, ele nao pega o valor selecionado…
pelo q eu vi o metodo SetValueAt(Table Model) só eh acionado quando eu clico em outra linha ou outra coluna… se eu clicar em qualquer outro lugar ele nao aciona esse metodo…
Ja tentei usar o Enter e somente o TAB funciona…
alguem tem alguma solução??
[]'s
Vamos analisar o cenário, você criou uma JTable e em uma determinada célula (ou nas célular de uma coluna) colocou um JComboBox, certo?
Se você pretende setar um valor para qualquer célula da tabela, pode normalmente usar o setValueAt(). Caso esteja querendo inserir um novo valor no JComboBox, bem, aí é outra história…
Isso mesmo eu tenho uma tabela com um combo, porem quando eu seleciono determinado valor dele e logo apos eu clico em salvar, ele nao aciona o evento SetValueAt… entendeu?
ele só aciona esse evento se eu clicar em outro lugar da tabela…
eu queria saber se existe um modo de chamar esse evento quando eu clicar no botao;…
[]'s
Então você está tentando passar o valor selecionado no JComboBox para outra célula, certo?
Como está teu código aí?
Eric Yuzo :
Seguinte esse metodo funciona em partes. ehehhee
Na primeira vez q eu faço ele nao funciona, ja nas seguintes funciona… 
Tipo, na primeira ele perde o foco somente da coluna, deixando-a nao selecionada porem o evento nao é acionado!
drsmachado
Na verdade eu preciso do valor selecionado no combo box para passar como parametro para outra classe… 
Essa minha classe TableModel q faz o set value
@Override
public void setValueAt(Object valor, int linha, int coluna) {
switch (coluna) {
case 0:
//c.setNf_numero(valor.toString());
break;
case 1:
//p.setNome_razao(valor.toString());
break;
case 2:
try {
lProd.set(linha, (Produtos) valor);
} catch (Exception e) {
lProd.set(linha, null);
}
break;
}
fireTableDataChanged();
}
Você compreendeu a estrutura que criou?
Pense na table como uma parede.
Você criou uma janela na parede, colocando o combobox, logo, naquele espaço, não é possível selecionar os tijolos da parede (o valor da célula em que está o combobox).
Sendo assim, você deve pegar o valor que a janela que foi colocada na parede possui. Se precisa do que está sendo mostrado ao usuário, o método getSelectedValue() deve ser utilizado (não esqueça do toString() no final, para atribuir à uma String, se for o caso).
[quote=drsmachado]Você compreendeu a estrutura que criou?
Pense na table como uma parede.
Você criou uma janela na parede, colocando o combobox, logo, naquele espaço, não é possível selecionar os tijolos da parede (o valor da célula em que está o combobox).
Sendo assim, você deve pegar o valor que a janela que foi colocada na parede possui. Se precisa do que está sendo mostrado ao usuário, o método getSelectedValue() deve ser utilizado (não esqueça do toString() no final, para atribuir à uma String, se for o caso).[/quote]
entendi… mas como eu pego esse getSelectdValue()? do JTable?
outra coisa, eu tenho minha classe ComboBoxEditor:
public class ComboBoxEditor extends AbstractCellEditor
implements TableCellEditor {
private JComboBox field;
private Produtos[] values = {};
private List<Produtos> lpro = new ArrayList<Produtos>();
private ProdutosJpaController projpa = new ProdutosJpaController();
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
lpro = projpa.findProdutosEntities();
field = new JComboBox(values);
field.addItem("");
for (int i = 0; i < lpro.size(); i++) {
field.addItem(lpro.get(i));
}
field.setSelectedItem(value); //Deixa o editor pré-selecionado com o valor da célula
return field;
}
@Override
public Object getCellEditorValue() {
return field.getSelectedItem();
}
}
O metodo getCellEditorValue(), nao deveria me retornar isso?
[]'s
CARA eu sou muito burroooo… shaushauhsuahsuahsuahsa
era só por esse codigo no inicio da classe e problema resolvido!!!
jTableProd.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
eu tinha posto ele no botao salvar e por isso na 1 vez nao funcionava e nas outras sim!
Mto obrigado pela ajuda de todos
[]'s