JPanel 的组件比自身大时,如何将 JPanel 添加到 JScrollPane?

How to Add JPanel to JScrollPane While JPanel Has Component Bigger Than Itself?

我的问题表明我是 JAVA 的新人 ;)

我正在尝试将 JPanel 添加到 JScrollPane,但是当我添加大于 JPanel 的组件时,JScrollPane 不起作用。

我可以通过将 JScrollPane 设置为小于 JPanel 来修复它,但这不是正确的解决方案(我想稍后动态地向 JPannel 添加组件)。

scroll2.setPreferredSize(新维度(500, 500));

什么是解决方案?谢谢

public class 主要扩展 JFrame {

private JPanel finalPan2;
JScrollPane scroll2;

public Main() throws HeadlessException {
    super("V4.0.3");
    try {

        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
        e.printStackTrace();
    }

    setSize(520, 540);
    setLocation(0, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new FlowLayout());
    setResizable(false);
    setVisible(true);

    finalPan2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
    finalPan2.setPreferredSize(new Dimension(620, 540));

    JButton bb = new JButton("Big Button");
    bb.setPreferredSize(new Dimension(50, 800));
    finalPan2.add(bb);

    scroll2 = new JScrollPane(finalPan2);
    scroll2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scroll2.setPreferredSize(new Dimension(500, 500));
    add(scroll2, BorderLayout.CENTER);
    setLocationRelativeTo(null);

}

public static void main(String args[]) {

    EventQueue.invokeLater(new Runnable() {

        // @Override
        public void run() {

            Main ba = new Main();

        }
    });

}

}

您有 JPanelScrollPane,但是 JPanel 不会更改大小以适应 JButton 的大小,因为您已经设置了它的大小首选尺寸。如果您取出 finalPan2.setPreferredSize(new Dimension(620, 540));,面板应该调整大小以适应按钮,并且滚动窗格应该可以工作。