Java Swing:JScrollPane无法工作

4
我有一个包含一些字段的JPanel,由于JPanel高度有限,我必须放置一个JScrollPane来让用户向下滚动。

正如下面所示,它显示得非常完美。但你无法向上或向下滚动。

DetailPanel detail = new DetailPanel();
JScrollPane jsp = new JScrollPane(detail);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp.setBounds(745, 10, 235, 225);
add(jsp);

详细信息面板:

private void init(){
            setLayout(null);
            setSize(140, 400);
            int x = 5, y = 0;
            for(int i = 0; i < lbls.length; i++) {
                JLabel lbl = new JLabel(lbls[i]);
                lbl.setBounds(x, y, 200, 25);
                add(lbl);
                fields[i] = new JTextField();
                fields[i].setBounds(x, y+26, 200, 25);
                add(fields[i]);
                y+=50;
            }
        }

enter image description here

2个回答

6

您的 DetailPanel 没有关联任何布局管理器,这意味着当您添加子项时它不会扩展,这也意味着 JScrollPane 没有可滚动的区域。请在您的 DetailPanel 上调用 setLayout() 或者重写 getPreferredSize() 方法来计算其子项的高度并返回一个有意义的值。


将来参考,因为我无法正确地使用这个东西:尝试使用setter,即setPreferredSize()是错误的,正如orzechowskid所说,你需要重写getter,即getPreferredSize(),这非常重要。 - mastazi

3
我可能错了,但我认为这可能是因为DetailPanel的布局为空。如果您在垂直方向上使用BoxLayout并调用detail.setPreferredSize(new Dimension(140,400));会发生什么?

+1 发现罪犯 -1 setPrefSize(这是绝对不可以的,https://dev59.com/BGw05IYBdhLWcg3weBlF#7229519) - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接