我有一个窗口,包含一个框架和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);
答案 0 :(得分:2)
。因此,如果Child Component的放置超出了面板宽度,它应该转到下一行,面板高度应该自动更改
FlowLayout会自动包装组件,但它不会使用新行上的组件重新计算首选大小。
相反,您可以使用扩展FlowLayout的Wrap Layout,以便在组件换行时可以正确地重新计算首选大小。
请注意,即使您不使用滚动窗格,也会发生换行。