根据用户输入生成 Java 摆动字段



Java 初学者在这里。

我正在尝试根据用户输入(输入 0 到 50 之间的标签数量(在 JScrollPane 内的 JPanel 中生成标签。

标签

生成正确,但问题是面板无法向下滚动以查看所有标签。

是因为我对面板使用绝对布局吗?如果是,那么解决方案是什么?请指导。

注意:我在 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);

是因为我对面板使用绝对布局吗?

是的。不要使用空布局。Swing 旨在与布局管理器一起使用。

解决方案是使用布局管理器,可能是建议的 GridLayout。

将所有组件添加到面板后,您需要在面板上调用revalidate()repaint()。这将调用布局管理器,每个组件将被赋予一个大小/位置。

然后,滚动条将根据需要显示。

最新更新