Как сделать всплывающую подсказку для JTable?

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

 

И так, давайте сначала просто попробуем создать элементарную таблицу, с некоторыми произвольными данными, которая будет выводить простую подсказку со статическим текстом, например, вот такую:

Пример формы с таблицей JTable

А вот и сам код:

Я создал отдельный класс для своей таблицы. Он унаследован от JTable, но в нем ничего не переопределено, кроме конструктора, который просто вызывает конструктор прародителя. Для задания текста подсказки для нашей таблицы, нужно переопределить метод getToolTipText(…), вот пример:

Аргументами методы является событие мыши, и не странно, так как именно задержка мыши над таблицей провоцирует всплывающую подсказку. Сам текст подсказки возвращается как результат метода. Давай те посмотрим, что получилось:

Пример всплывающей подсказки для JTable

Как видите, работает, но пользы пока что мало. Можно сделать, что бы всплывающая подсказка отображала название столбца. Для этого изменим наш метод:

Сначала я получаю номер столбца, над которым находится мышь с помощью columnAtPoint(…). Потом проверяю, не равен ли он -1. Это нужно для того, что бы определить, что мышь не находится в свободном пространстве таблицы. А потом с помощью функции getColumnName(…) узнаю имя столбца.

Вот результат:

Всплывающая подсказка с именем столбца - 1

 

Всплывающая подсказка с именем столбца - 2

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

Как видите — ничего сложного. Я просо определил номер строки, над которой находится курсор, после чего узла значение ячейки, которая находится на пересечении строки и столбца.

Удачного программирования, друзья. Задавайте свои ответы!

Комментарии 1

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *