Можно ли как-нибудь выделить строку в JTable? - PullRequest
2 голосов
/ 02 апреля 2011

В настоящее время я строю базу данных, используя JTable и DefaultTableModel.В моей программе есть функция, которая позволяет пользователям осуществлять поиск в базе данных.У меня есть сборка поисковой части, но я не знаю, как выделить строку или ячейку в JTable.Может кто-нибудь помочь мне?

Спасибо

Ответы [ 3 ]

3 голосов
/ 02 апреля 2011

Вы уверены, что хотите выделить, а не отфильтровать посторонние результаты? Если вы выделите, вам придется прокручивать весь список, чтобы найти все подходящие результаты, тогда как, если вы отфильтруете экран, вам будет гораздо проще найти то, что вы ищете.

Если вы пойдете по пути фильтрации, я загляну в GlazedLists , действительно великолепную библиотеку Java для таких задач, как динамическая фильтрация, сортировка и т. Д. JTables.

Если вы все еще хотите пойти по пути выделения, то я вижу два основных способа сделать это. Во-первых, необходимо использовать ListSelectionModel JTable и убедиться, что все соответствующие строки находятся в выбранном наборе; это заставит их визуально различаться с минимумом кодирования. С другой стороны, как только пользователь перетаскивает таблицу и выбирает что-то еще, визуальный эффект теряется.

Второй способ сделать это - использовать пользовательский TableCellRenderer , который изменяет способ отображения строки, если строка соответствует вашим критериям выбора. Простой способ сделать это - изменить цвет фона.

1 голос
/ 02 апреля 2011

В руководстве Swing по Как использовать таблицы есть раздел по фильтрации, так что вы можете просто отобразить данные, которые соответствуют критериям поиска. Если вы хотите увидеть все данные, то просто удалите фильтр.

Если вы действительно хотите сделать отдельное выделение, я бы взглянул на подход Рендеринг таблицы .

0 голосов
/ 02 апреля 2011

Я могу рассказать вам, как я это делаю. Я реализовал свой поиск, чтобы работать как поиск в документе, то есть находить один результат за раз. Я сохраняю текущий индекс выбранной строки или начинаю с первого, если ни одна строка ранее не была выбрана. Затем моя модель реализует мой интерфейс с функциональностью для поиска следующего или предыдущего соответствия, пример ниже показывает использование метода find next match, который возвращает индекс строки в таблице, где была найдена соответствующая строка, затем я изменяю выбор на иначе я отменяю выбор, чтобы пользователь знал, что совпадений нет.


    int index = serchableTableModel.findNextMatchIndex(serchedText, currentIndex);
    if(index != -1)
    table.changeSelection(index, 0, false, false);
    else
    table.clearSelection();

Надеюсь, это решит вашу проблему.

ПРИМЕЧАНИЕ: я не знал о застекленных списках прежде, они действительно кажутся многообещающими. Они бы спасли меня от реализации сортировки таблиц, поиска себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...