Java JScrollPane在JPanel中不起作用

Java JScrollPane在JPanel中不起作用,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,我必须在我的项目中使用JScrollPane,但它不起作用 我已将代码粘贴到主JPanel中使用JSCrollPane的位置 frame = new JFrame(); frame.setBounds(100, 100, 1179, 733); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null);

我必须在我的项目中使用
JScrollPane
,但它不起作用

我已将代码粘贴到主JPanel中使用
JSCrollPane
的位置

frame = new JFrame();
        frame.setBounds(100, 100, 1179, 733);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JScrollPane scrollPane_1 = new JScrollPane();
        scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane_1.setBounds(0, 0, 1163, 694);
        frame.getContentPane().add(scrollPane_1);

        JPanel panel = new JPanel();
        scrollPane_1.setViewportView(panel);
        panel.setLayout(null);

将布局设置为Null意味着您需要手动处理放置-->指定像素位置并处理容器的大小

布局管理器将为您处理此放置。管理器根据其内容计算其首选大小。滚动窗格使用布局管理器计算的大小

这意味着您应该使用布局管理器,将组件放置在其中。其余的应该自动工作

 public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setSize(500, 500);

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(30, 15));
    for (int row = 0; row < 30; row++) {
        for (int col = 0; col < 15; col++) {
            panel.add(new Button("Button" + row + "/" + col));
        }
    }

    frame.getContentPane().add(new JScrollPane(panel));
    frame.setVisible(true);
}
publicstaticvoidmain(字符串[]args){
JFrame=新JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
框架。设置尺寸(500500);
JPanel面板=新的JPanel();
面板设置布局(新网格布局(30,15));
对于(int行=0;行<30;行++){
for(int col=0;col<15;col++){
添加(新按钮(“按钮”+行+“/”+列));
}
}
frame.getContentPane();
frame.setVisible(true);
}

我不确定您使用的是哪种布局,但您需要像这样设置面板布局

panel.setLayout(new FormLayout(
                        "default:grow",
                        "fill:default:grow"));

所有问题的主要原因是
setLayout(null)
-Swing是围绕布局管理器的概念设计的,它定义了确定子组件如何在父容器中布局的所有工作,一直到层次结构链的上一步。通过使用
null
布局,您已经剥夺了整个API确定组件有多大以及如何最好地响应组件的能力,特别是在
JScrollPane
的情况下,它使用此信息确定何时显示滚动条,什么是解决方案根据您的需要使用适当的布局管理器