根据用户输入生成 java 个摆动字段
Generating java swing fields based on user input
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);
Is it because I am using absolute layout for the panel?
是的。不要使用空布局。 Swing 旨在与布局管理器一起使用。
解决方案是使用布局管理器,可能是建议的 GridLayout。
将所有组件添加到面板后,您需要在面板上调用 revalidate()
和 repaint()
。这将调用布局管理器,每个组件将被赋予一个 size/location.
然后将根据需要显示滚动条。
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);
Is it because I am using absolute layout for the panel?
是的。不要使用空布局。 Swing 旨在与布局管理器一起使用。
解决方案是使用布局管理器,可能是建议的 GridLayout。
将所有组件添加到面板后,您需要在面板上调用 revalidate()
和 repaint()
。这将调用布局管理器,每个组件将被赋予一个 size/location.
然后将根据需要显示滚动条。