Показывать «строки не найдены» внутри строки JTable, если не найдена запись во время фильтрации - PullRequest
4 голосов
/ 21 июня 2010

У меня есть JTable с фильтром строк.

, если мне не удалось получить строку, то мне нужно показать строку типа «Ничего не найдено для отображения» внутри таблицы в качестве первой строки.

Пожалуйста, сделайте необходимое.

Спасибо, Нарасимха

Ответы [ 3 ]

9 голосов
/ 29 марта 2011

Мне нужно было решить именно эту проблему сегодня, и я не смог найти хороший ответ онлайн.В конце концов я придумал собственное решение, которое, я думаю, может быть именно тем, что вы хотите.Я не знаю, если это слишком поздно для вашего проекта, но, возможно, это может помочь другим:

JTable.paintComponent(Graphics g) не будет вызван, если высота таблицы не превышает 0. Это вызывает проблемудля пустых таблиц, поэтому мы увеличиваем высоту JTable, если это необходимо, чтобы она всегда была как минимум размером с JViewport, который является его родителем.

0 голосов
/ 22 июня 2010

Показать строку текста в многоколоночной таблице может быть довольно сложно, диапазон AFAIK не поддерживается.Одной из возможностей было бы скрыть все столбцы данных (чтобы показать их позже, вы должны их где-то запомнить) и показать один столбец для сообщения.

Более простым способом было бы создать JPanel с CardLayout, добавить 2 карты- одна содержит таблицу, а другая содержит предупреждение о пустых данных.Если фильтр возвращает пустой результат, покажите карточку с пустым предупреждением, в другом случае - покажите таблицу.

0 голосов
/ 22 июня 2010

Если фильтр исключил все строки, результат, возвращаемый getViewRowCount(), будет равен нулю.Вы можете обновить графический интерфейс соответственно;setToolTipText() удобно, если на экране недостаточно места.

Вот пример:

TableModel model = ...
JTable table = new JTable(model);
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
JLabel label = new JLabel("");
...
String s = "Rows: " + sorter.getViewRowCount()
pane.setToolTipText(s);
label.setText(s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...