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

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

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

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


person shuby_rocks    schedule 03.10.2009    source источник
comment
Это может оказаться полезным: exampledepot.com/egs/javax.swing. таблица/pkg.html   -  person OMG Ponies    schedule 03.10.2009


Ответы (2)


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

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

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

person akf    schedule 03.10.2009

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

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

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

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

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

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

person camickr    schedule 03.10.2009