猿问

根据用户输入生成 java swing 字段

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);


扬帆大鱼
浏览 128回答 1
1回答

潇潇雨雨

是因为我在面板上使用了绝对布局吗?是的。不要使用空布局。Swing 旨在与布局管理器一起使用。解决方案是使用布局管理器,可能是建议的 GridLayout。将所有组件添加到面板后,您需要在面板上调用revalidate()和。repaint()这将调用布局管理器,并且每个组件都将被赋予一个大小/位置。然后将根据需要显示滚动条。
随时随地看视频慕课网APP

相关分类

Java
我要回答