我正在创建一个包含菜单,工具栏,表格和按钮面板的JFrame应用程序。我想使用滚动窗格作为顶级容器,这样如果用户调整应用程序的大小,按钮等就不会从屏幕上掉下来。
这是主框架的构造函数代码:
JPanel mainPanel = new JPanel(); // borderlayout, north=toolbar, center=table, south=buttton panel
mainPanel.setLayout(new BorderLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder());
mainPanel.add(new MainToolBar(inventoryActions, false), BorderLayout.NORTH);
InventoryTable inventoryTable = new InventoryTable();
JScrollPane tableScrollPane = new JScrollPane(new JTable());
mainPanel.add(new JScrollPane(tableScrollPane), BorderLayout.CENTER);
mainPanel.add(tableScrollPane, BorderLayout.CENTER);
inventoryTable.adjustColumnWidths();
mainPanel.add(new InventoryActionsButtonPanel(inventoryActions), BorderLayout.SOUTH);
JScrollPane mainScrollPane = new JScrollPane();
mainScrollPane.setBorder(BorderFactory.createEmptyBorder());
mainScrollPane.setViewportView(mainPanel);
getContentPane().add(mainScrollPane, BorderLayout.CENTER);
正如你所看到的......我正在使用JPanel来包含工具栏,表格(嵌套在另一个滚动窗格中)和按钮面板。然后我将此面板放在主滚动窗格中。最后,我将主滚动窗格添加到内容窗格中。
我的应用程序的初始大小为800x600。当我运行它一切都很好。这是一个截图:
然而,当我调整框架大小时,滚动面板"会激活"在框架变小之前的方式,你可以在这里看到:
任何想法为什么我的滚动面板显示滚动条而框架仍然那么大?我必须设置一些首选尺寸吗?
谢谢。
注意,如果我注释掉将滚动条添加到主面板(中心)的代码行,或者如果我使用其他swing组件(例如JButton),它就不像以前那样表现:
//mainPanel.add(tableScrollPane, BorderLayout.CENTER);
以下是截图:
答案 0 :(得分:0)
(主要)问题是JScrollPane
正在使用JTable
' s getPreferredScrollableViewportSize
,它会覆盖getPreferredSize
属性。
默认设置为450x400
。
您可以使用JTable#setPreferredScrollableViewportSize
另一个技巧是将JTable
添加到另一个容器(例如JPanel
)并将其设置为滚动窗格的视图