我有一个子面板,有时会向其中添加一些组件。我希望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是一个完全放置在JTabbedPane中的JPanel,因此它占据了所有选项卡。

最佳答案

也许您正在寻找Wrap Layout,当水平空间被填充时,它将把组件包装到下一行。

09-13 12:11