【问题标题】:Changing current selection in JXTable doesn't work?更改 JXTable 中的当前选择不起作用?
【发布时间】:2013-02-14 22:13:19
【问题描述】:

我有一个 JXTable,用户需要在其中引入数据,然后保存。唯一的问题是,用户必须在保存之前取消选择最后编辑的单元格。如果没有,则不会保存该单元格的数据。

我唯一想到的就是在保存之前自动更改当前选择。这是我尝试过的:

table.getSelectionModel().setSelectionInterval(0, 0);
table.getColumnModel().getSelectionModel().setSelectionInterval(0, 0);

table.getSelectionModel().setLeadSelectionIndex(0);
table.getColumnModel().getSelectionModel().setLeadSelectionIndex(0);

这两种方法似乎都不起作用,但这是我发现的唯一两种方法。

谁能告诉我如何正确地做到这一点或提出一个替代方案来让它保存最后一个单元格中的数据?

【问题讨论】:

  • a) 行为与核心 jtable 不同吗? b) 保存是如何实现的(单击按钮、菜单项、键绑定)?

标签: java swing jxtable


【解决方案1】:

我假设用户在希望保存数据时单击了另一个组件 (JButton)。如果您在该事件发生时引用了JXTable,您可以在其中添加以下代码:

if (table.isEditing()) {
    table.getCellEditor().stopCellEditing();
}

stopCellEditing() 应该保存模型的状态,并允许您保存所有内容,包括当前选择/编辑的单元格。


编辑:正如kleopatra 所指出的,处理此问题的默认(更好!)方式是通过 JTable 组件的客户端属性:

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

对于JXTable,这应该已经设置,这表明您的 UI 处理保存功能的方式不包括将焦点从表格移开。所以本质上,当你的“保存”事件被触发时,你最好改变焦点。

【讨论】:

  • 并不总是需要:只要按钮是可聚焦的,要做的就是将表格的 terminatesEditOnFocusLost 客户端属性设置为 true。这是 jxTable 中的默认设置,因此可能有问题的按钮无法聚焦 - 您的解决方案确实是一个选项:-)
  • 谢谢,好点子。我已经编辑了答案,指出更好的方法是正确地将焦点从 JXTable 上移开。
  • 非常感谢你,赫米特!下面的代码就像一个魅力! if (table.isEditing()) { table.getCellEditor().stopCellEditing(); “terminateEditOnFocusLost”没有改变任何东西,但感谢您的帮助!使用我使用的代码,选择 DID 移动到我指向它的位置,但最后编辑的单元格中的数据没有保存。但是有了上面提到的代码,这个问题就解决了。再次感谢!
  • @Xaviraan:当心(并重复我自己;-) - 如果这有帮助,那么值得尝试找出为什么需要它。它应该在大多数情况下都可以正常工作,因此在某处(在您的代码或框架代码中)可能存在或不存在通过显式终止覆盖(相对于解决)的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多