Добавьте текст и значок (с помощью MouseListener) в столбец JTable

StackOverflow https://stackoverflow.com/questions/1512797

Вопрос

Я хочу реализовать следующую функциональность, но я в замешательстве, возможно ли это в 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(), чтобы удалить столбец из представления таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top