I am having an issue with JTables I know my code is a little hard to follow, it\'s also a little jumbled around because it\'s coming from a fairly big program. And yes I just le
JTable
can't returns proper Dimension
or PreferredSize
, there are three ways
table.setPreferredScrollableViewportSize(table.getPreferredSize());
but notice for small JTables with a few Rows and Columns too
to calculate desired size for (part) of Columns and (part) Rows too, then pass this Dimension
in form table.setPreferredScrollableViewportSize(new Dimension(x, y));
override getPreferredSize
for JScrollPane
then JFrame.pack(before JFrame.setVisible(true))
to calculate desired Size on the screen
JPanel
has FlowLayout
implemented in API, I'd to suggest to change to BorderLayout, then JScrollPane in CENTER area can fill whole (available) area and will be resizable with JFrame, not possible to resize JComponent (together with its container) layed by FlowLayout
have to call data.revalidate()
, data.repaint()
and Show.pack()
as last code lines instead of (remove this code line) Show.setVisible(true);
rename Show
to myFrame
and show
to myButton
What exactly does the
setPreferredScrollableViewportSize
do? Does it just force the table to always be that size? What is the whole pack thing?
The getPreferredScrollableViewportSize()
method is defined in the Scrollable
interface, discussed in Implementing a Scrolling-Savvy Client. Rather than setting the preferred size, you can override getPreferredScrollableViewportSize()
to change the default. Making the height a multiple of getRowHeight()
is illustrated here. More on preferred size may be found here. Conveniently, the pack()
method "Causes this Window
to be sized to fit the preferred size and layouts of its subcomponents."