提问者:小点点

JScrollPanel,水平和垂直滚动不工作


我有下一个代码:

public class MyScroll extends JFrame {

    public MyScroll() {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        panel.setLayout(null);

        for (int i = 0; i < 10; i++) {
            JButton b = new JButton("Hello-" + i);
            b.setBounds(0, i * 50, 100, 45);
            panel.add(b);

            b.setLayout(null);
        }

        JScrollPane scrollPane = new JScrollPane(panel);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setBounds(50, 30, 100, 325);

        JPanel contentPane = new JPanel(null);
        contentPane.setPreferredSize(new Dimension(500, 400));
        contentPane.setBackground(Color.BLUE);
        contentPane.add(scrollPane);

        contentPane.setLayout(null);

        setContentPane(contentPane);
        pack();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
    }
}

而且,它正在呈现这个:

如您所见,垂直和水平滚动不起作用,但两者都已定义并显示在JPanel中。

有人能解释一下我做错了什么吗?

此代码基于以下代码:滚动JPanel但是,目前无法使用垂直滚动


共1个答案

匿名用户

有人能解释一下我做错了什么吗?

panel.setLayout(null);

不要使用空布局。

只有当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,滚动条才会自动出现。

确定面板的首选大小是布局管理器的工作。由于您不使用布局管理器,因此不会计算首选大小。

所以解决方案是使用布局管理器。也许垂直BoxLayout