Добавить текст и значок (с помощью MouseListener) в столбец JTable - PullRequest
1 голос
/ 03 октября 2009

Я хочу реализовать следующие функции, но я запутался, если это возможно в Java. Если да, то как? Пожалуйста, помогите:

Я хочу создать таблицу типа JTable, в которой 1-я строка таблицы содержит имена столбцов и значок в каждом столбце, то есть в каждой ячейке 1-й строки. Нажатие на этот значок должно привести к удалению этого столбца из таблицы (возможно, с помощью MouseListener ??).

Я нашел много решений, в которых я могу добавить кнопку в ячейку в JTable, но ни одно из них не описывает добавление текста и значка (с помощью MouseListener) в ячейку. Пожалуйста, посмотрите, можете ли вы помочь, и большое спасибо за чтение.

Ответы [ 2 ]

3 голосов
/ 03 октября 2009

Вы можете создать пользовательский TableCellRenderer, который расширяет JLabel. Этот JLabel можно создать с помощью значка (JLabel может отображать значки справа или слева от текста). Вам нужно, чтобы getTableCellRendererComponent проверял, является ли отображаемая строка первой или нет, и, если это так, установите значок, в противном случае - нет.

Для действия по удалению вы можете добавить MouseListener к таблице, а при обработке метода mouseClicked вы можете найти ячейку, по которой щелкнули, путем тестирования rowAtPoint и columnAtPoint, создав Point из mouseEvent.getX() и mouseEvent.getY(). Если вы определили, что была нажата первая строка со значком, вы можете удалить столбец из модели столбца.

Если под 1-й строкой вы на самом деле имеете в виду заголовок таблицы, вы можете создать тот же рендер для JTableHeader и установить MouseListener для этого компонента.

2 голосов
/ 03 октября 2009

Ну, я не понимаю вашего вопроса.

Я хочу создать вид JTable таблица, в которой содержится 1-я строка таблицы имена столбцов и значок

Вы имеете в виду заголовок таблицы, например, как работает сортировка, отображая имя столбца и направление сортировки?

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

Или вы имеете в виду первую строку данных в таблице. Если это так, то вам все равно нужно использовать пользовательский рендер, но на этот раз вы добавляете MouseListener в таблицу, а не в заголовок таблицы.

В обоих случаях вы можете использовать метод TableColumnModel.removeColumn (), чтобы удалить столбец из представления таблицы.

...