JTable.clearSelection() vs Jtable.getSelectionModel.clearSelection() - When to use what?

只谈情不闲聊 提交于 2019-12-14 03:45:33

问题


I need to cancel all selections within a JTable model object. Java provides this function "clearSelection()" which does, what I need, as far as I understand.

But I am confused why this function can be called on a JTable object as well as on a selection model for a JTable object:

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

Both ways work, but I do not understand in what situation a clearSelection() of a SelectionModel (like at 2) ) would make any sense. As far as I understood SelectionModels, they are used to decide what kind of selections a JTable allows. I use the SelectionModel to only allow a Selection of exactly one row

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

Which way is to be preferred in what kind of situation? Is there a good reason not to use way 1?

I would be glad if anyone has some beginner friendly explanation for that. Thx in advance.


回答1:


Here is the implementation of JTable#clearSelection()

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

As you can see, there is two ListSelectionModel which are cleared, because you can select column and/or row and/or cell.

From Oracle tutorial :

JTable uses a very simple concept of selection, managed as an intersection of rows and columns. It was not designed to handle fully independent cell selections.

A ListSelectionModel handle all aspect of the selection such as which row is selected, how can we select some rows, etc... Not only the kind of selection !
More information in the Oracle JTable tutorial




回答2:


Usually when you see two methods like that it is because the table will invoke the SelectionModel.clearSelection() method for you. So the table method is a convenience method.

In this case the actual code is:

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

So both the row and column selection models are cleared.



来源:https://stackoverflow.com/questions/18337580/jtable-clearselection-vs-jtable-getselectionmodel-clearselection-when-to-u

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!