CellEditor.java的getCellEditorValue()仅在单击单元格时调用

CellEditor.java的getCellEditorValue()仅在单击单元格时调用,java,swing,jcombobox,Java,Swing,Jcombobox,考虑以下Jtable,更准确地说是第一列,其中包含一个JComboBox: 当我试图保存第一个JComboBox的值时,即在没有首先单击它的情况下将auth2作为其值的JComboBox,当我检查数据库时,我发现一个空字符串 然而,当我首先单击它然后保存时,我得到了存储在数据库中的正确值 使用调试器,我发现CellEditor.java的getCellEditorValue方法只有在您首先单击JComboBox本身时才被调用 这就解释了为什么在数据库中,当我首先单击JComboBox时会得到正确

考虑以下Jtable,更准确地说是第一列,其中包含一个JComboBox:

当我试图保存第一个JComboBox的值时,即在没有首先单击它的情况下将auth2作为其值的JComboBox,当我检查数据库时,我发现一个空字符串

然而,当我首先单击它然后保存时,我得到了存储在数据库中的正确值

使用调试器,我发现CellEditor.java的getCellEditorValue方法只有在您首先单击JComboBox本身时才被调用

这就解释了为什么在数据库中,当我首先单击JComboBox时会得到正确的值,而当我不单击它时,会得到一个空字符串

所以我的问题是,是否有一种方法可以在每次保存时调用getCellEditorValue方法,而不管我是否单击JComboBox

多谢各位

当我首先单击JComboBox时,我得到了正确的值,而当我没有单击它时,我得到了一个空字符串

您不应该尝试从组合框访问值。组合框作为表中所有行的编辑器共享

有没有办法在每次保存时调用getCellEditorValue方法

数据存储在TableModel中,而不是组合框中

您可以随时使用JTable或TableModel的getValueAt…方法从模型中获取值


注意:根据您正在执行的操作,数据可能尚未从编辑器保存到TableModel。如果是这种情况,请查看:以获取解决方案。

感谢您抽出时间。问题在于,保存值的代码部分位于CellEditor.java的getCellEditorValue中。这个方法似乎只有在我点击单元格时才会被调用。所以我保存值的唯一方法就是通过这个方法。这就是为什么我在寻找一种方法来调用它,即使我不点击单元格本身。不,这不是问题所在。当您试图访问表中的数据时,没有理由处理编辑器。我已经给了你一个正确的解决方案。你说得对,我没有完全理解编辑器是如何工作的,我感谢你的时间和耐心。我不得不对已经存在的代码进行很多修改,以使其正常工作,但您的建议在很大程度上帮助了我找到了解决方案。再次感谢您的帮助。发布一个适当的演示问题的帖子。也就是说,使用组合框作为编辑器的JTable创建一个JFrame。然后在框架中添加一个按钮。单击按钮时,从表中选定行的TableModel中获取值。编辑器将与添加到按钮的ActionListener中的代码无关。