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
的情况下,它使用此信息确定何时显示滚动条,什么是解决方案根据您的需要使用适当的布局管理器