- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的表单中,我有一个带有 TableModelListener 的 JTable。 tableChanged 方法更新我的 JButton 上的逻辑。这一切都工作正常。当用户编辑 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);
tableChanged 方法
public void tableChanged(TableModelEvent e) {
setRemoveButtonVisibility();
setRemoveAllButtonVisibility();
setCommentButtonVisibility();
setOKButtonEnabledStatus();
}
我的单例类
public class SingletonSelectTable extends AbstractTableModel {
希望这有帮助
最佳答案
How can I tell that something has changed and the Table has been updated without a Event taking place in the jtable itself?
JTable
中从来没有任何事件。它是底层TableModel
变化了,那就是 TableModel
触发一个事件。JTable
向TableModel
注册一个监听器所以它知道何时应该更新显示的表格内容。
因此,如果您是说 JTable
更新(自动,因此无需您滚动/选择/悬停/...)意味着 TableModel
确实会触发一个事件,这意味着您也可以监听它。
在该场景中,您的 TableModel
的一个元素如果您的应用程序发生更改,则应该触发 TableModelEvent
来自TableModel
。通常,这是通过让 TableModel
来完成的。监听其包含的对象的更改,或者让更改对象的代码也通知 TableModel
基础数据已更改。无论哪种方式,TableModel
需要触发一个事件,因此您的监听器没有理由不接收它,除非它根本没有被触发(意味着不正确的 TableModel
)。
根据您的评论,我最好的猜测是您的 TableModel
的实现不正确。那你的TableModel
根本不触发事件,并且 JTable
“意外”更新(根据我的经验, JTable
对于丢失事件相当强大,当然是在没有添加/删除行的情况下......与 JTree
相比绝对如此)
The getValueAt() method picks up the change and then updates the jtable
这听起来确实不正确。 getValueAt()
方法通常由 JTable
调用收到事件后。感谢这次 Activity ,JTable
知道它必须更新,因此它会查询模型以获取新数据。所以getValueAt
方法不会获取更改,但会因更改而被调用。
我强烈建议您查看 Swing table tutorial ,当然还有关于 Creating a table model 的部分, Listening for data changes和 Firing data change events
关于java - 刷新 JTable 时执行 tableChange(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11547241/
我正在用 Java 编写 Swing 代码。我正在使用 Netbeans 布局管理器。我在使用 jTable 时遇到了问题。我已经应用了一个扩展 AbstractTableModel 的客户模型。我希
tableChanged() 对 JTable 线程的调用是否安全,以便我可以从另一个线程调用它,例如完成下载的东西?我想象 tableChanged() 只是将一个新事件放入事件队列中,以便 Eve
在我的表单中,我有一个带有 TableModelListener 的 JTable。 tableChanged 方法更新我的 JButton 上的逻辑。这一切都工作正常。当用户编辑 jtable 中单
我已经阅读了所有看起来似乎可以解决我的问题的线程,并且我也阅读了这里的所有答案,但我仍然束手无策。我不确定为什么抛出异常,尽管我有一种感觉这可能与 threading 有关。 。如果是这样,请告诉我在
加载时,我的 JTable 有 2 列 - .所以它是第一列中的字符串和第二列中的复选框。当我单击复选框 tableChanged 时,我可以打印所选的行数据。 当用户在下拉列表中选择新类别时,我需要
每当数据从 CSV 文件加载到表中时,TableModelListener 的方法 tableChanged(TableModelEvent e) 就会被调用。我不希望这种事发生。 我希望仅在添加表格
我是一名优秀的程序员,十分优秀!