Это особенность реализации JTable Scrollable: она устанавливает произвольный фиксированный размер prefScrollable.
Вы обнуляете его, чтобы scrollPane переключился на использование предпочитаемого размера таблицы:
table.setPreferredScrollableViewportSize (null);
Редактировать
outch, @vedran правильно, это не всегда работает в основной таблице с core layoutManagers (это был хороший взлом вдругой вопрос :) извините за путаницу.Копирование его комментария здесь:
table.setPreferredScrollableViewportSize(table.getPreferredSize());
является жизнеспособным вариантом, хотя все обычные опасения по поводу размеров жесткого кодирования также применимы и здесь.
Хорошо ведущий себя JTable реализовал бы более разумныйgetPreferredScrollableViewportSize, например, для расчета с точки зрения содержания.JXTable (которая является таблицей с лучшим поведением, пристрастная ко мне :-), вы можете установить pref в терминах видимых строк, как в списке:
xtable.setVisualRowCount(3);