JScrollPanel,水平和垂直滚动不起作用

时间:2019-03-17 20:38:30

标签: java swing

我有下一个代码:

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);
    }
}

而且,它正在渲染:

enter image description here

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

有人可以告诉我我在做什么错吗?

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

1 个答案:

答案 0 :(得分:1)

  

有人可以告诉我我在做什么错吗?

panel.setLayout(null);

请勿使用空布局。

仅当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,滚动条才会自动显示。

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

因此解决方案是使用Layout Manager。也许是垂直BoxLayout