Программно выберите строку в JTable

При запуске приложения ни одна из строк не выбрана. Но я хотел бы показать, что первая строка уже выбрана.

Как это сделать? Нужно ли устанавливать цвет строки в JTable?

Обновление: я попробовал table.setRowSelectionInterval(0,0). Я знаю, что это должно работать, но есть сообщение об ошибке:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Row index out of range
    at javax.swing.JTable.boundRow(Unknown Source)
    at javax.swing.JTable.setRowSelectionInterval(Unknown Source)
    at cpn_gui.OptPanel.createForm(OptPanel.java:124)
    at cpn_gui.OptPanel.<init>(OptPanel.java:50)
    at cpn_gui.Login$1.actionPerformed(Login.java:62)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

person Klausos Klausos    schedule 28.12.2011    source источник


Ответы (3)


Вы можете сделать это, вызвав setRowSelectionInterval :

table.setRowSelectionInterval(0, 0);

для выбора первой строки.

person aleroot    schedule 28.12.2011
comment
Пожалуйста, следите за обновлениями в моем посте. Я отправил сообщение об ошибке. Что может быть не так? - person Klausos Klausos; 29.12.2011
comment
Мой код выглядит следующим образом: QueryTableModel tableModel = new QueryTableModel(); Таблица JTable = новая JTable (модель таблицы); таблица.setRowSelectionInterval (0, 0); - person Klausos Klausos; 29.12.2011
comment
Перед вызовом table.setRowSelectionInterval(0, 0) вы должны убедиться, что в таблице присутствует хотя бы одна строка, иначе вы получите эту ошибку. Вызовите table.setRowSelectionInterval(0, 0) после заполнения таблицы... - person aleroot; 29.12.2011

Это старый пост, но я недавно наткнулся на это

Выбор определенного интервала

Как уже упоминалось @aleroot, с помощью

table.setRowSelectionInterval(index0, index1);

Вы можете указать интервал, который следует выбрать.

Добавление интервала к существующему выбору

Вы также можете сохранить текущий выбор и просто добавить дополнительные строки, используя здесь

table.getSelectionModel().addSelectionInterval(index0, index1);

Эта строка кода дополнительно выбирает указанный интервал. Неважно, выбран ли уже этот интервал, выбраны ли его части.

person rst    schedule 04.02.2016
comment
Это более общий ответ, который охватывает как последовательный, так и непоследовательный выбор строк. Это сработало для меня. - person Kamal Singh; 01.04.2016

Вы используете доступный API. из JTable и не пытайтесь возиться с цветами.

Некоторые методы выбора доступны непосредственно на JTable (например, setRowSelectionInterval). Если вы хотите иметь доступ ко всей логике, связанной с выбором, модель выбора — это место, с которого нужно начать поиск

person Robin    schedule 28.12.2011
comment
Я попробовал table.setRowSelectionInterval(1,1), но он говорит, что индекс строки вне диапазона, хотя таблица уже была заполнена из БД. Любые идеи? - person Klausos Klausos; 29.12.2011
comment
Как почти все в Java, нумерация начинается с строки 0, а не с строки 1. Поэтому измените ее на setRowSelectionInterval(0,0). - person Robin; 29.12.2011