Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于用户输入生成java swing字段_Java_Swing_Jpanel_Jscrollpane - Fatal编程技术网

基于用户输入生成java swing字段

基于用户输入生成java swing字段,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,这里是Java初学者 我正在尝试根据用户输入在JScrollPane内的JPanel中生成标签(输入要生成的标签数量在0到50之间) 标签生成正确,但问题是无法向下滚动面板以查看所有标签 是因为我使用了面板的绝对布局吗?如果是,那么解决方案是什么?请导游 注意:我在for循环中使用50个jlabel的数组制作标签。糟糕的编程实践也许会奏效 下面是代码片段 frame = new JFrame(); frame.setSize(800, 800);

这里是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);
frame=newjframe();
框架设置尺寸(800800);
frame.getContentPane().setLayout(null);
JScrollPane scrollPane=新的JScrollPane(JScrollPane.垂直滚动条总是,JScrollPane.水平滚动条总是);
滚动窗格.立根(103,37,439,350);
frame.getContentPane().add(滚动窗格);
JPanel面板=新的JPanel();
scrollPane.setViewportView(面板);
panel.setLayout(空);
JButton btnGenerateLabels=新JButton(“生成标签”);
btnGenerateLabels.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
JLabel[]lab=新的JLabel[50];
int y=50;
对于(int i=0;i
是因为我使用了面板的绝对布局吗

是的。不要使用空布局。Swing设计用于布局管理器

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

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


滚动条将根据需要显示。

而不是
panel.setLayout(null);
您应该/可能会使用
panel.setLayout(新的GridLayout(0,1))
,这可能已经解决了问题。我猜你的
JPanel
没有设置为比你的视口大的大小,因此没有额外的空间可以滚动。试试看。我纯粹是从臀部拍摄,但我已经旋转了足够多的角度来猜测。没有。没有任何效果。网格布局没有与标签的背景一致。而且大小增量对代码没有任何影响。好吧,它起作用了。我不知道revalidate()的用法,使用的布局是@Marco13建议的GridLayout。谢谢您的帮助。