代码之家  ›  专栏  ›  技术社区  ›  Benjamin RD

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

  •  0
  • Benjamin RD  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  0
  •   camickr    6 年前

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

    panel.setLayout(null);
    

    不要使用空布局。

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

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

    所以解决方法是使用 Layout Manager . 可能是垂直的 BoxLayout .