Java初学者在这里。我正在尝试在 JScrollPane 内的 JPanel 中根据用户输入(输入要生成的标签数量在 0 到 50 之间)生成标签。标签生成正确,但问题是面板无法向下滚动以查看所有标签。是因为我在面板上使用了绝对布局吗?如果是,那么解决方案可能是什么?请指导。注意:我在 for 循环中使用 50 个 JLabel 数组制作了标签。糟糕的编程实践可能但有效。这是代码片段 frame = new JFrame(); frame.setSize(800, 800); frame.getContentPane().setLayout(null); JScrollPane scrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setBounds(103, 37, 439, 350); frame.getContentPane().add(scrollPane); JPanel panel = new JPanel(); scrollPane.setViewportView(panel); panel.setLayout(null); JButton btnGenerateLabels = new JButton("Generate Labels"); btnGenerateLabels.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JLabel[] lab = new JLabel[50]; int y = 50; for(int i=0; i<50; i++) { lab[i] = new JLabel(); lab[i].setText("Label "+(i+1)); panel.add(lab[i]); lab[i].setBounds(180, y, 97, 25); y += 30; } } }); btnGenerateLabels.setBounds(129, 23, 152, 25); panel.add(btnGenerateLabels);
1 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
是因为我在面板上使用了绝对布局吗?
是的。不要使用空布局。Swing 旨在与布局管理器一起使用。
解决方案是使用布局管理器,可能是建议的 GridLayout。
将所有组件添加到面板后,您需要在面板上调用revalidate()
和。repaint()
这将调用布局管理器,并且每个组件都将被赋予一个大小/位置。
然后将根据需要显示滚动条。
添加回答
举报
0/150
提交
取消