如果在运行时添加子组件,如何调整面板大小?

时间:2016-05-19 06:34:17

标签: java swing

我有一个窗口,包含一个框架和JScrollBar。 JScrollBar有面板,如果添加了任何子组件,我希望在运行时更改其大小。子组件大小是不变的,不应更改。

我禁用了水平滚动条。因此,如果Child Component的放置超出了面板宽度,它应该转到下一行,面板高度应该自动更改。

以下是代码段

JScrollPane scrollPane = new JScrollPane();

menuPane = new JPanel();
menuPane.setLayout(new FlowLayout(FlowLayout.CENTER));

scrollPane.setViewportView(menuPane);

MenuTray mtFile = new MenuTray("File");    // MenuTray extends JPanel
menuPane.add(mtFile);

Menu mNew = new Menu((new ImageIcon(MenuScreen.class.getResource("/com/srinar/res/New.png"))), "New"); // Menu extends JLabel
mtFile.add(mNew);

frame.getContentPane().add(scrollPane);

Final GUI

1 个答案:

答案 0 :(得分:2)

  

。因此,如果Child Component的放置超出了面板宽度,它应该转到下一行,面板高度应该自动更改

FlowLayout会自动包装组件,但它不会使用新行上的组件重新计算首选大小。

相反,您可以使用扩展FlowLayout的Wrap Layout,以便在组件换行时可以正确地重新计算首选大小。

请注意,即使您不使用滚动窗格,也会发生换行。