【问题标题】:JTable.clearSelection() vs Jtable.getSelectionModel.clearSelection() - When to use what?JTable.clearSelection() 与 Jtable.getSelectionModel.clearSelection() - 什么时候使用什么?
【发布时间】:2013-08-22 15:41:06
【问题描述】:

我需要取消 JTable 模型对象中的所有选择。 Java 提供了这个函数“clearSelection()”,据我所知,它可以满足我的需要。

但我很困惑为什么可以在 JTable 对象以及 JTable 对象的选择模型上调用此函数:

 1) mytable.clearSelection();
 2) mytable.getSelectionModel().clearSelection();

这两种方式都有效,但我不明白在什么情况下 SelectionModel 的 clearSelection() (如 2 处)会有意义。据我了解 SelectionModels,它们用于决定 JTable 允许什么样的选择。我使用 SelectionModel 只允许选择恰好一行

//allow only one row to be selected
mytable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

在什么样的情况下首选哪种方式?是否有充分的理由不使用方式 1?

如果有人对此有一些初学者友好的解释,我会很高兴。提前谢谢。

【问题讨论】:

  • 当你调用 table.clearSelection() 时它可能使用默认模型,但这只是猜测!

标签: java swing jtable selection selectionmodel


【解决方案1】:

这里是JTable#clearSelection()的实现

public void clearSelection() {
    selectionModel.clearSelection();
    columnModel.getSelectionModel().clearSelection();
}

如您所见,有两个ListSelectionModel 被清除,因为您可以选择列和/或行和/或单元格。

来自 Oracle 教程:

JTable 使用一个非常简单的选择概念,作为一个 行和列的交集。它的设计不是为了完全处理 独立的单元格选择。

ListSelectionModel 处理选择的所有方面,例如选择了哪一行,我们如何选择某些行等等......不仅仅是选择的那种!
更多信息the Oracle JTable tutorial

【讨论】:

  • 感谢您的友好解释。因此,如果我说得对, selectionModel.clearSelection() 会清除行的选择,而 columnModel.getSelectionModel().clearSelection() 会清除列的选择,这样两者都会一起清除单元格上的选择,对吗?由于您的解释,我觉得调用 mytable.clearSelection() 比 mytable.getSelectionModel().clearSelection() 更受欢迎,因为它进行了更广泛的清除。感谢您提供有关 ListSelectionModel 的提示。
  • @Simeon 应该是这样的,除了我认为只清除列(或行)的选择就足以取消选择一个单元格。 (如果没有选择行,如何选择单元格。与列相同的推理)。很高兴能提供帮助;)
【解决方案2】:

通常当您看到两个类似的方法时,这是因为表格会为您调用 SelectionModel.clearSelection() 方法。所以table方法是一种方便的方法。

在这种情况下,实际代码是:

public void clearSelection() 
{
    selectionModel.clearSelection();
    columnModel.getSelectionModel().clearSelection();
}

所以行和列选择模型都被清除了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2022-11-10
    • 2014-06-04
    • 2017-09-13
    相关资源
    最近更新 更多