Java 使JFrame中的JPanel可滚动

Java 使JFrame中的JPanel可滚动,java,swing,jframe,scrollbar,Java,Swing,Jframe,Scrollbar,在这里,我向JPanel添加了一些标签,并希望使此面板可滚动,因此请提供帮助。我正在添加以面板作为构造函数的滚动窗格,这样我就可以使面板成为可滚动的,但我没有这样做 但我使用的是任何jpanel,我只使用框架,然后添加一些标签和tf 实际上,您正在使用JPanel。JFrame的内容窗格是一个JPanel,因此实际上正在将组件添加到框架中 阅读Swing教程中解释Swing中层次结构的部分 因此,解决问题的简单方法是: 将零部件添加到配电盘 使用面板作为参数创建JScrollPane,然后 然后

在这里,我向
JPanel
添加了一些标签,并希望使此面板可滚动,因此请提供帮助。我正在添加以面板作为构造函数的滚动窗格,这样我就可以使面板成为可滚动的,但我没有这样做

但我使用的是任何jpanel,我只使用框架,然后添加一些标签和tf

实际上,您正在使用JPanel。JFrame的内容窗格是一个JPanel,因此实际上正在将组件添加到框架中

阅读Swing教程中解释Swing中层次结构的部分

因此,解决问题的简单方法是:

  • 将零部件添加到配电盘
  • 使用面板作为参数创建JScrollPane,然后
  • 然后将滚动窗格添加到框架中
    这就是它的工作方式,您无法使框架可滚动。

    这是实现此GUI中所需功能的方法

    package new1;
    
    import javax.swing.*;
    
    public class New1 {
    
        JFrame f = new JFrame("demo");
        JPanel p = new JPanel();
        JLabel l = new JLabel("one");
        JLabel la = new JLabel("two");
        JTextField t = new JTextField();
        JTextField ta = new JTextField();
        JScrollPane sc = new JScrollPane(p); // scrollbar with panel as constructor.
    
        New1() {
            f.add(p); // adding panel o the frame
            p.setVisible(true);
            p.setLayout(null);
            p.setSize(1400, 900);
            l.setBounds(10, 50, 100, 20); // setting dimension of labels
            la.setBounds(10, 100, 100, 20);
            t.setBounds(50, 100, 100, 20);   //setting dimension of Textfields
            tx.setBounds(50, 50, 100, 20);
            p.add(l);
            p.add(t);
            p.add(la);
            p.add(ta);
            p.add(tx);
            f.setLayout(null);
            f.setVisible(true);
            f.setSize(1400, 900);
            sc.setSize(1350, 700);  //setting size of scrollpane
            sc.setVisible(true);
            p.add(sc);       // adding to the panel
        }
    
        public static void main(String[] args) {
            new New1();
        }
    }
    

    可能重复No,但我使用的是任何jpanel m,只使用frame,然后添加一些标签和tf。因此,请解决我的问题。我已经添加了所有符合面板和面板的框架,但它仍然不能滚动,我不能自动调整大小,所以请帮助。在本期中,向我们展示您的代码。我们将修复它公共类New1{JFrame f=new JFrame(“demo”);JPanel p=new JPanel();JLabel l=new JLabel(“one”);JTextField t=new JTextField();JScrollPane sc=new JScrollPane(p);New1(){f.add(p);p.setVisible(true);p.setLayout(null);p.setSize(1400900);l.setBounds(10,50,100,20);t.ounds(50100100,20);p.add(l);p.add(l);p.add)(p.add)(p.add)(p.add)(t);f.setLayout)setlayou(null);f.setVisible(true);f.setSize(1400900);sc.setSize(1350700);sc.setVisible(true);p.add(sc);}公共静态void main(String[]args){new New1();}好的,我已经将所有组件添加到面板中,并将面板添加到框架中,但它仍然不可滚动。Plz帮助。@RaviRanjanPatel
    并将面板添加到框架中
    -这不是我的建议。阅读答案。如果需要更多帮助,请发布一篇正确的演示问题的文章。公共类New1{JFrame f=new JFrame(“演示”)JTextField t=new JTextField();JScrollPane sc=new JScrollPane(p);New1(){f.add(p);p.setVisible(true);p.setLayout(null);p.setSize(1400900);l.setBounds(10,50,100,20);t.setBounds(50100100,20);p.add(l);p.add(t);f.setLayout(null);f.setVisible(true);f.setSize(1400900);sc.setSize(1350700);sc.setVisible(true);p.add(sc);}public static void main(String[]args){new New1();}这是我的一小部分od代码。请修复它,并使其可滚动,我将高度感激u@RaviRanjanPatel,不要使用空布局。Swing旨在与一起使用。布局管理器的功能之一是根据添加到面板的组件确定面板的
    首选尺寸
    。然后,当首选尺寸为g时滚动条的大小大于滚动窗格的大小。很抱歉,我已使用您建议的代码编辑了我的代码。但它仍然不可滚动。“但它仍然不可滚动。”请参阅上面的完整代码。“我已使用您建议的代码编辑了我的代码…”该代码片段并非用于复制/粘贴示例。其目的是让您仔细了解它是如何实现滚动的,并使其适应您的代码。在不理解的情况下复制/粘贴随机代码位不会导致一个工作程序,只是一团乱。很抱歉,rply太晚了……好的,我已经使用了它,并且它的工作方式非常简单nk非常感谢……但我怀疑我们是否添加了此标签,但我们如何更改其名称,就像我插入了“2017年6月”这样的月份名称,然后在下一个lbl中插入“2017年7月”等ao,我可以这样做吗??“好的,我已经使用了此功能,非常感谢您……”如果它有助于解决(当前)问题,请回答。但我有……”进一步的问题?在一个单独的问题线索上问他们。这是一个问答网站,这个问题已经被回答了。
        JPanel p = new JPanel(new GridBagLayout());
        ui.add(new JScrollPane(p, 
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(4,4,4,4);
        for (int ii=0; ii<50; ii++) {
            gbc.gridy = ii;
            gbc.gridx = 0;
            p.add(new JLabel("Label " + (ii+1)), gbc);
            gbc.gridx = 1;
            p.add(new JTextField("Text Field " + (ii+1), 20), gbc);
        }
    
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    
    public class New2 {
    
        private JComponent ui = null;
    
        New2() {
            initUI();
        }
    
        public void initUI() {
            if (ui!=null) return;
    
            ui = new JPanel(new BorderLayout(4,4));
            ui.setBorder(new EmptyBorder(4,4,4,4));
    
            JPanel p = new JPanel(new GridBagLayout());
            ui.add(new JScrollPane(p, 
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
                    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.insets = new Insets(4,4,4,4);
            for (int ii=0; ii<50; ii++) {
                gbc.gridy = ii;
                gbc.gridx = 0;
                p.add(new JLabel("Label " + (ii+1)), gbc);
                gbc.gridx = 1;
                p.add(new JTextField("Text Field " + (ii+1), 20), gbc);
            }
        }
    
        public JComponent getUI() {
            return ui;
        }
    
        public static void main(String[] args) {
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (Exception useDefault) {
                    }
                    New2 o = new New2();
    
                    JFrame f = new JFrame(o.getClass().getSimpleName());
                    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    f.setLocationByPlatform(true);
    
                    f.setContentPane(o.getUI());
                    f.pack();
                    Dimension d = f.getSize();
                    f.setSize(new Dimension(d.width, 400));
                    f.setMinimumSize(f.getSize());
    
                    f.setVisible(true);
                }
            };
            SwingUtilities.invokeLater(r);
        }
    }