Java 不稳定行为

Java 不稳定行为,java,swing,jtable,Java,Swing,Jtable,我有一些旧的Java应用程序,它使用JTable来显示一些数据并允许输入。 JTable有2列。在JTable旁边,有一个按钮,用于将新行添加到JTable中 我的问题是当您导航JTable时,Tab键和Enter键以及鼠标单击的行为 我会尝试解释: 假设JTable中有5行: 如果我用鼠标单击一行,有时整行会高亮显示,有时单元格会进入编辑模式(除了整行高亮显示之外) 有时,选定行会高亮显示,但高亮显示行上方或下方的单元格会进入编辑模式 若我使用Tab从一个字段跳到另一个字段,那个么可编辑字段总

我有一些旧的Java应用程序,它使用JTable来显示一些数据并允许输入。 JTable有2列。在JTable旁边,有一个按钮,用于将新行添加到JTable中

我的问题是当您导航JTable时,Tab键和Enter键以及鼠标单击的行为

我会尝试解释: 假设JTable中有5行:

  • 如果我用鼠标单击一行,有时整行会高亮显示,有时单元格会进入编辑模式(除了整行高亮显示之外)
  • 有时,选定行会高亮显示,但高亮显示行上方或下方的单元格会进入编辑模式
  • 若我使用Tab从一个字段跳到另一个字段,那个么可编辑字段总是在高亮显示的行的上方 还有其他问题


    有什么想法吗?关闭表格单元格编辑。看看它的行为。通常,可以通过将TableModel.isCellEditable()方法更改为仅返回false来处理此问题

    把它打开。您的JTable实例是子类的吗?它是否覆盖editCell()?如果是,则该方法将根据事件是否发生触发编辑。该方法正在不适当地启用编辑。如果该方法被重写,则该方法的实现是不好的


    如果表不是子类,请查找对editCell()的调用。这些调用可能不恰当,因此您可以查找这些调用并开始设置断点或日志语句。

    这听起来有点奇怪。您是否完全使表无效并通知侦听器等行数已更改

    在表模型中,循环所有TableModelListener并触发TableModelEvent“insert”事件:

    TableModelEvent event = new TableModelEvent(
                    modelInstance,
                    positionOfNewRow,
                    positionOfNewRow,
                    TableModelEvent.ALL_COLUMNS,
                    TableModelEvent.INSERT);
    
    for (TableModelListener l: listeners) {
        l.tableChanged(event);
    }
    
    如果你不能解决这个问题,你可以为表格写下你自己的行为

    以下是一些有用的方法:

    editCellAt(int row, int column);
    rowAtPoint(Point point);
    columnAtPoint(Point point);
    

    您可以将自己的侦听器添加到表中,以截取事件并以您喜欢的任何方式编辑单元格。

    这个问题非常适合用a编辑问题。不幸的是,这不是我的代码,JAVA也不是我最擅长的。正如我所见,JTable不是子类。有一个方法public void editingStopped(ChangeEvent anEvent),每次单元格退出编辑模式时都会运行该方法。我在里面注释了整个代码,不稳定的行为停止了。我想我太快了,不能责怪JTable control。我想我现在明白我所描述的行为发生的原因了。我试图找出这个侦听器的设置位置。我找不到它。是否有编辑启动事件?Thx.没有editingStarted事件。为了拦截,您需要调用JTable.editCell(),或者子类JTable并重写editCell()。