Следующий (в настоящее время принятый) код не учитывает различные аспекты внешнего вида:
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension( d.width, table.getRowHeight() * (rows+1) ));
- Строка заголовка не обязательно
table.getRowHeight()
пикселей по высоте. (В «Металле» L & F он выше)
- Вертикальная полоса прокрутки в
scrollPane
приведет к тому, что стол будет меньше нужного размера.
- Горизонтальная полоса прокрутки займет дополнительное пространство, поэтому не все запрошенные
rows
строки будут видны.
Вместо этого следует использовать следующий код:
table.setPreferredScrollableViewportSize(
new Dimension(
table.getPreferredSize().width,
table.getRowHeight() * visible_rows));
scrollPane
запросит у таблицы предпочтительный размер и добавит к этому дополнительное пространство для заголовка и полос прокрутки.
Ниже показана разница в JTable
с 4 строками, когда visible_rows
уменьшено с 4
до 3
. Предпочтительная ширина JScrollPane
автоматически дополняется, чтобы включить полосу прокрутки вместо сжатия столбцов таблицы. Также обратите внимание на место для заголовка (которое отличается от высоты строки), также предоставляется автоматически; он не включен в число visible_rows
.