在焦点丢失时动态更改JTable单元格值

时间:2015-01-02 13:14:33

标签: java swing jtable jtextfield tablecelleditor

我有一个JTable,其单元格编辑器是一个JTextField,我在celleditor上调用focuslost 其代码是

public void focusLost(FocusEvent e)
{
 JTextField textField = new JTextField();
 textField = (JTextField) e.getSource();
 textField.setText(getCurrencyEquivalent(textField.getText()));//read P.S
 table.setValueAt(textField.getText(), table.getEditingRow(), 0);
}

我遇到以下异常:

java.lang.ArrayIndexOutOfBoundsException: -1

当我调试时,很明显,在焦点实际上从JTable的单元格中丢失之后,在cellEditor上触发了focuslost。这使得table.getEditingRow()总是返回-1,因此很难在focuslost动态设置值。如果有的话,请通过任何其他技术帮助我解决这个问题。

P.S:getCurrencyEquivalent()是一种以不同的String格式返回给定String的格式化版本的方法。

1 个答案:

答案 0 :(得分:2)

  

getCurrencyEquivalent()是一种以不同的String格式返回给定String的格式化版本的方法。

在编辑数据时,请勿使用FocusListener尝试更改数据的格式。

相反,您应该使用自定义渲染器来格式化数据。查看Table Format Renderers,了解如何执行此操作的简单示例。