Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 刷新JTable时执行的tableChange()_Java_Swing_Jtable - Fatal编程技术网

Java 刷新JTable时执行的tableChange()

Java 刷新JTable时执行的tableChange(),java,swing,jtable,Java,Swing,Jtable,在我的表单中,我有一个带有TableModelListener的JTable。tableChanged方法更新我的JButtons上的逻辑。这一切都正常工作。当用户编辑jtable中某个单元格中的值时,会执行tableChanged方法并相应地刷新按钮 我遇到的问题是,这是一个表演的阻碍。JTable显示对象和对象的某些属性。用户从应用程序中选择对象。 如果我选择了一个对象并显示在jtable中。如果该用户更改了应用程序中的属性值,而没有在JTable中编辑它。jtable仍会刷新,并显示更改后

在我的表单中,我有一个带有TableModelListener的JTable。tableChanged方法更新我的JButtons上的逻辑。这一切都正常工作。当用户编辑jtable中某个单元格中的值时,会执行tableChanged方法并相应地刷新按钮

我遇到的问题是,这是一个表演的阻碍。JTable显示对象和对象的某些属性。用户从应用程序中选择对象。
如果我选择了一个对象并显示在jtable中。如果该用户更改了应用程序中的属性值,而没有在JTable中编辑它。jtable仍会刷新,并显示更改后的值。但是TableModelEvent没有发生,并且我的按钮逻辑从未刷新

我已经查看了TableCellListeners,但仍在查找表中的编辑。所以我认为这在这里行不通

在jtable本身没有发生事件的情况下,如何判断某些内容已更改,并且表已更新

编辑:放置一些jtable代码

这是在我的基本对话类

selectTable = new JTable(SingletonSelectTable.getInstance());
selectTable.getModel().addTableModelListener(this); 
selectTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        Font font = comp.getFont();
        if (SingletonSelectTable.getInstance().isCellBold(row, column) == true){
           comp.setFont(font.deriveFont(Font.BOLD));
        }
     return comp;
     }
  });

selectTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
selectTable.setCellSelectionEnabled(false);
selectTable.setRowSelectionAllowed(true);
selectTable.setColumnSelectionAllowed(false);
JScrollPane ScrollPane = new JScrollPane(selectTable);
表格改变了方法

public void tableChanged(TableModelEvent e) {
  setRemoveButtonVisibility();
  setRemoveAllButtonVisibility();
  setCommentButtonVisibility();
  setOKButtonEnabledStatus();
}

我的单身班

public class SingletonSelectTable extends AbstractTableModel {
我希望这有帮助

在jtable本身没有发生事件的情况下,如何判断某些内容已更改,并且表已更新

JTable
中从来没有事件。更改的是底层的
TableModel
,触发事件的是
TableModel
JTable
TableModel
注册一个侦听器,以便它知道何时应该更新显示的表内容

因此,如果您说
JTable
得到更新(自动更新,因此无需滚动/选择/悬停/…),则意味着
TableModel
确实触发了一个事件,这意味着您也可以监听它

在该场景中,应用程序中的
TableModel
元素发生了更改,应该有人从
TableModel
触发
TableModel事件。通常,这是通过让
TableModel
侦听它所包含的对象中的更改来完成的,或者让更改对象的代码也通知
TableModel
底层数据已更改。无论哪种方式,
TableModel
都需要触发一个事件,因此您的侦听器没有理由不接收它,除非它没有被触发(意味着不正确的
TableModel

根据您的评论,我最好的猜测是您的
TableModel
实现不正确,并且您的
TableModel
根本没有触发事件,并且
JTable
被“意外”更新(根据我的经验,
JTable
对于缺少的事件非常健壮,当然是在没有添加/删除行的情况下……与
JTree
相比,这是非常明确的)

getValueAt()方法获取更改,然后更新jtable

这听起来确实不正确
方法通常在收到事件后由
JTable
调用。由于该事件,
JTable
知道它必须更新,因此它会查询模型中的新数据。因此
getValueAt
方法不会拾取更改,而是作为更改的结果被调用

我强烈建议大家看一下,当然还有关于,和的章节

在jtable本身没有发生事件的情况下,如何判断某些内容已更改,并且表已更新

JTable
中从来没有事件。更改的是底层的
TableModel
,触发事件的是
TableModel
JTable
TableModel
注册一个侦听器,以便它知道何时应该更新显示的表内容

因此,如果您说
JTable
得到更新(自动更新,因此无需滚动/选择/悬停/…),则意味着
TableModel
确实触发了一个事件,这意味着您也可以监听它

在应用程序中更改了
TableModel
的一个元素的情况下,应该从
TableModel
中触发
TableModel事件
。通常通过让
TableModel
侦听它所包含的对象中的更改,或者让更改对象的代码也执行此操作通知
TableModel
基础数据已更改。无论哪种方式,
TableModel
都需要触发一个事件,因此您的侦听器没有理由不接收它,除非它没有被触发(意味着不正确的
TableModel

根据您的评论,我最好的猜测是您的
TableModel
实现不正确,并且您的
TableModel
根本没有触发事件,并且
JTable
被“意外”更新(根据我的经验,
JTable
对于缺少的事件非常健壮,当然是在没有添加/删除行的情况下……与
JTree
相比,这是非常明确的)

getValueAt()方法获取更改,然后更新jtable

这听起来确实不正确方法通常在收到事件后由
JTable
调用。由于该事件,
JTable
知道它必须更新,因此它会查询模型中的新数据。因此
getValueAt
方法不会拾取更改,而是作为更改的结果被调用


我强烈建议大家看一看,当然还有关于和

在不改变TableModel的情况下JTable单元格是如何变化的?不知道…,为了更好地帮助您尽早发布SSCCET,getValueAt()方法会获取变化,然后更新jtabl