我有一个subPanel,我偶尔会添加一些组件。我希望FlowLayout能够正确布局它们。我将subPanel放在JScrollPane中让用户看到所有组件,但我不想打扰用户水平滚动。但是,当添加更多组件时,JScrollPane允许subPanel水平扩展。通过这种方式,所有组件都水平显示在一条线上。这意味着最糟糕的布局。
this.setLayout(new GridLayout(1, 1));
subPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
subPanel.setMaximumSize(new Dimension(500, 4000));
subPanel.setBackground(Color.CYAN);
subPane = new JScrollPane(subPanel);
subPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
subPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
this.add(subPane);
在其他地方我添加了一个componentListener来解决问题,但问题仍然存在:
@Override
public void componentShown(ComponentEvent e) {
subPanel.setSize(getSize());
}
@Override
public void componentResized(ComponentEvent e) {
subPanel.setSize(getSize());
}
this
是一个JPanel,它完全位于JTabbedPane中,因此占据了所有标签。
答案 0 :(得分:3)
也许你正在寻找Wrap Layout,当水平空间被填满时,它会将组件包装到下一行。
答案 1 :(得分:2)
通过这种方式,所有组件都水平显示在一条线上。这意味着最糟糕的布局。
但这正是FlowLayout应该做的,而且正是它的作用。
为什么不简单地使用面向BoxLayout.PAGE_AXIS的BoxLayout