Включение автоматического изменения размера JTable, только если оно соответствует области просмотра

Мне нужно создать JTable внутри JScrollPane с изменяемыми размерами столбцов (когда пользователь увеличивает ширину столбца - появляется горизонтальная полоса прокрутки). Для этого у меня есть использованиеtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);, Кроме того, когда область просмотра достаточно широка, чтобы содержать всю таблицу - столбцы должны растягиваться, чтобы заполнить ширину области просмотра. Для этого у меня есть переопределениеgetScrollableTracksViewportWidth() метод класса JTable следующим образом:

@Override
public boolean getScrollableTracksViewportWidth() {
    return getPreferredSize().width < getParent().getWidth();
}

Этот подход работает хорошо, за исключением одного: когда я впервые пытаюсь изменить размер столбца, он возвращает собственную ширину в начальную позицию. Если я быстро изменю размер колонки и отпущу таблицу мыши, продолжу работать хорошо. Итак, в чем причина такого поведения? Почему таблицы пытаются изменить размер, даже еслиgetScrollableTracksViewportWidth()&nbsp;возвращает ложь? Или, может быть, вы можете предложить лучшее решение для реализации такого режима изменения размера?

Ниже приведен простой рабочий пример вышеуказанной проблемы:

import javax.swing.*;

public class TestTable {
    private static Object[][] data = new Object[][] {
            { "a", "b", "c" },
            { "d", "e", "f" }
    };
    private static Object[] colNames = new Object[] { "1", "2", "3" };

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JTable table = new JTable(data, colNames) {
                    @Override
                    public boolean getScrollableTracksViewportWidth() {
                        return getPreferredSize().width < getParent().getWidth();
                    }
                };
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}