Я могу дать вам один из возможных подходов.Я пытался решить ту же проблему, потому что хотел сериализовать информацию о ширине столбцов на диск, чтобы в следующий раз, когда таблица открывалась в моем приложении, я мог соответствующим образом восстановить ширину столбцов.Вот так:
Шаг 1. Переопределите JTable и добавьте в него логическое свойство
class MyTable extends JTable {
private boolean isColumnWidthChanged;
public boolean getColumnWidthChanged() {
return isColumnWidthChanged;
}
public void setColumnWidthChanged(boolean widthChanged) {
isColumnWidthChanged = widthChanged;
}
}
Шаг 2. Добавьте TableColumnModelListener () ктаблица
private class TableColumnWidthListener implements TableColumnModelListener
{
@Override
public void columnMarginChanged(ChangeEvent e)
{
/* columnMarginChanged is called continuously as the column width is changed
by dragging. Therefore, execute code below ONLY if we are not already
aware of the column width having changed */
if(!tableObj.hasColumnWidthChanged())
{
/* the condition below will NOT be true if
the column width is being changed by code. */
if(tableObj.getTableHeader.getResizingColumn() != null)
{
// User must have dragged column and changed width
tableObj.setColumnWidthChanged(true);
}
}
}
@Override
public void columnMoved(TableColumnModelEvent e) { }
@Override
public void columnAdded(TableColumnModelEvent e) { }
@Override
public void columnRemoved(TableColumnModelEvent e) { }
@Override
public void columnSelectionChanged(ListSelectionEvent e) { }
}
Шаг 3 - Добавить прослушиватель мыши в заголовок таблицы
private class TableHeaderMouseListener extends MouseAdapter
{
@Override
public void mouseReleased(MouseEvent e)
{
/* On mouse release, check if column width has changed */
if(tableObj.getColumnWidthChanged())
{
// Do whatever you need to do here
// Reset the flag on the table.
tableObj.setColumnWidthChanged(false);
}
}
}
ПРИМЕЧАНИЕ: В моем приложенииклассы TableHeaderMouseListener и TableColumnWidthListener были частными внутренними классами моего основного класса приложения.Мой основной класс приложения придерживался ссылки на наблюдаемую таблицу.Следовательно, эти внутренние классы имели доступ к экземпляру таблицы.Очевидно, что в зависимости от вашей настройки вам нужно сделать соответствующую вещь, чтобы сделать экземпляр таблицы доступным для этих других классов.Надеюсь, это поможет!