框架很大时滚动窗格激活

时间:2014-04-01 22:16:51

标签: java resize jframe scrollbars scrollpane

我正在创建一个包含菜单,工具栏,表格和按钮面板的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。当我运行它一切都很好。这是一个截图:

Initial Startup

然而,当我调整框架大小时,滚动面板"会激活"在框架变小之前的方式,你可以在这里看到:

Scroll Pane Activated

任何想法为什么我的滚动面板显示滚动条而框架仍然那么大?我必须设置一些首选尺寸吗?

谢谢。

注意,如果我注释掉将滚动条添加到主面板(中心)的代码行,或者如果我使用其他swing组件(例如JButton),它就不像以前那样表现:

//mainPanel.add(tableScrollPane, BorderLayout.CENTER);

以下是截图:

Scrolls Correctly

1 个答案:

答案 0 :(得分:0)

(主要)问题是JScrollPane正在使用JTable' s getPreferredScrollableViewportSize,它会覆盖getPreferredSize属性。

默认设置为450x400

您可以使用JTable#setPreferredScrollableViewportSize

更改此设置

另一个技巧是将JTable添加到另一个容器(例如JPanel)并将其设置为滚动窗格的视图