Добавьте текст и значок (с помощью MouseListener) в столбец JTable
-
19-09-2019 - |
Вопрос
Я хочу реализовать следующую функциональность, но я в замешательстве, возможно ли это в Java.Если да, то каким образом?Пожалуйста, помогите:
Я хочу создать таблицу типа JTable, где 1 - й ряд таблица содержит названия столбцов и значок в каждом столбце, т.е.в каждой ячейке 1-го ряда.Нажатие на этот значок должно привести к удалению этого столбца из таблицы (возможно, с помощью MouseListener ??).
Я нашел много решений, где я могу добавить кнопку в ячейку в JTable, но ни одно из них не описывает добавление как текста, так и значка (с MouseListener) в ячейку.Пожалуйста, посмотрите, можете ли вы помочь, и большое спасибо за чтение.
Решение
Вы можете создать индивидуальный TableCellRenderer
который простирается JLabel
.Этот JLabel
можно создать с помощью значка (JLabel
может отображать значки справа или слева от текста).Вы захотите getTableCellRendererComponent
чтобы проверить, является ли отображаемая строка первой или нет, и если да, установите значок, в противном случае не делайте этого.
Для действия по удалению вы можете добавить MouseListener
на столе, а при обработке mouseClicked
вы можете найти ячейку, по которой был сделан щелчок, проверив метод rowAtPoint
и columnAtPoint
путем создания Point
из mouseEvent.getX()
и mouseEvent.getY()
.Если вы определите, что была нажата первая строка со значком, вы можете удалить столбец из модели столбца.
Если по 1-й ряд, на самом деле вы имеете в виду заголовок таблицы, вы можете создать тот же рендерер для JTableHeader
, и установите MouseListener
на этом компоненте.
Другие советы
Что ж, я не понимаю вашего вопроса.
Я хочу создать тип JTable таблица, в которой 1-я строка таблицы содержит названия столбцов и значок
Вы имеете в виду заголовок таблицы, например, как работает сортировка путем отображения имени столбца и направления сортировки?
Если это так, то вы используете пользовательский рендерер для заголовка таблицы и добавляете MouseListener в заголовок, чтобы определить, по какому столбцу был сделан щелчок.Вы должны быть в состоянии настроить Средство визуализации заголовка таблицы по умолчанию делать то, что ты хочешь.
Или вы имеете в виду первую строку данных в таблице.Если это так, то вам все равно нужно использовать пользовательский рендерер, но на этот раз вы добавляете MouseListener в таблицу, а не в заголовок таблицы.
В обоих случаях вы можете использовать метод TableColumnModel.removeColumn(), чтобы удалить столбец из представления таблицы.