Jtable, выполните следующие действия.clearSelection () vs Jtable.getSelectionModel.не() - когда использовать?

мне нужно отменить все выборки в объекте модели JTable. Java предоставляет эту функцию " clearSelection ()", которая делает то, что мне нужно, насколько я понимаю.

но я смущен, почему эта функция может быть вызвана для объекта JTable, а также для модели выбора для объекта JTable:

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

оба способа работают, но я не понимаю, в какой ситуации clearSelection() модели SelectionModel (например, в 2) ) имел бы какой-либо смысл. Насколько я понял SelectionModels, они используются, чтобы решить, какой выбор позволяет JTable. Я использую SelectionModel, чтобы разрешить выбор только одной строки

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

какой способ предпочтительнее в какой ситуации? Есть ли веская причина не использовать способ 1?

Я был бы рад, если у кого-то есть какое-то дружелюбное объяснение для начинающих. Заранее спасибо.

2 ответов


вот реализация JTable#clearSelection()

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

как вы можете видеть, есть два ListSelectionModel, которые очищаются, потому что вы можете выбрать столбец и/или строку и/или мобильный.

из руководства Oracle:

JTable использует очень простую концепцию выбора, управляемую как пересечение строк и столбцов. Он не был конструирован для того чтобы отрегулировать полно независимые выборки ячеек.

A ListSelectionModel обрабатывать все аспекты выбора такие как выбрать строку, как мы можем выбрать некоторые строки и т. д... Не только вид отбора !
Дополнительная информация в учебник Oracle JTable


обычно, когда вы видите два таких метода, это потому, что таблица вызовет SelectionModel.не() метод для вас. Таким образом, таблица представляет собой удобный метод.

в этом случае фактический код:

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

таким образом, модели выбора строк и столбцов очищаются.