java - 将 JPanel 添加到 JScrollPane

标签 java jpanel jscrollpane layout-manager springlayout

我有一个 gui,它有一个面板,其中包含一系列标签和文本字段,并使用 Spring 布局(这是 mainPanel),另一个面板仅包含一个按钮(buttonPanel)。我试图让我的 mainPanel 也有一个垂直滚动条。我想实现我的 GUI,以便在 JFrame 中我有 2 个面板。 mainPanel 出现在框架的顶部,buttonPanel 出现在mainPanel 的下方。

我的问题是我无法使面板出现,使按钮面板位于主面板下方,并且我也不知道如何向主面板添加滚动条。任何帮助,将不胜感激。

编辑:我能够解决有关 JPanel 的问题,现在我唯一的问题是我无法让我的 mainPanel 滚动。我在下面添加了最新的代码:

这是我到目前为止的代码:

public static void main(String args[]) {


            JFrame frame = new JFrame("SpringLayout");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JScrollPane scroll = new JScrollPane();
            Container contentPane = frame.getContentPane();

           JButton next = new JButton("Next");
           JPanel buttonPanel = new JPanel();
           buttonPanel.add(next);
            SpringLayout layout = new SpringLayout();
            JPanel mainPanel = new JPanel();
            mainPanel.setLayout(layout);
            contentPane.setLayout(new BorderLayout());


            int j = 25;
            for(int i =0;i<150;i++){
                JLabel label = new JLabel("Enter Name " + i );
                JTextField text = new JTextField(15);

            mainPanel.add(label);
            mainPanel.add(text);
            layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
                            contentPane);
            layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
                            contentPane);
            layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
                            contentPane);
            layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
                            label);
            j+=30;
            }
            //mainPanel.setSize(500,800);
            scroll.setPreferredSize(new Dimension(500,500));
            scroll.setViewportView(mainPanel);
            contentPane.add(scroll);
            contentPane.add(buttonPanel,BorderLayout.SOUTH);
            //mainWindow.add(contentPane);
            frame.setSize(500, 600);
            frame.setVisible(true);



        }

最佳答案

为了使其可滚动,我只需要增加 mainPanel 的首选大小,使其大于滚动条。

 public static void main(String args[]) {
                JFrame frame = new JFrame("SpringLayout");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JScrollPane scroll = new JScrollPane();
                Container contentPane = frame.getContentPane();

               JButton next = new JButton("Next");
               JPanel buttonPanel = new JPanel();
               buttonPanel.add(next);
                SpringLayout layout = new SpringLayout();
                JPanel mainPanel = new JPanel();
                mainPanel.setLayout(layout);
                contentPane.setLayout(new BorderLayout());


                int j = 25;
                for(int i =0;i<18;i++){
                    JLabel label = new JLabel("Enter Name " + i );
                    JTextField text = new JTextField(15);

                mainPanel.add(label);
                mainPanel.add(text);
                layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
                                contentPane);
                layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
                                contentPane);
                layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
                                contentPane);
                layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
                                label);
                j+=30;
                }
                mainPanel.setPreferredSize(new Dimension(mainPanel.getWidth(), 1500));
                scroll.setPreferredSize(new Dimension(500,500));
                scroll.setViewportView(mainPanel);
                contentPane.add(scroll);
                contentPane.add(buttonPanel,BorderLayout.SOUTH);
                //mainWindow.add(contentPane);
                frame.setSize(500, 600);
                frame.setVisible(true);
        }

关于java - 将 JPanel 添加到 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588250/

相关文章:

java - 如何确定一个类是否不可变

java - 在 Spark/Jetty-server 中重新加载静态文件

java - 尝试在 SASL 身份验证期间切换数据库目标

java - 为什么此代码不会在底部显示三个按钮的滚动 Pane 内显示内容

java - 如何获取 JScrollPane 中 JTable 模型的所有可见行

java - Java 中的内部类覆盖率

java - 如何绘制多条线,看起来像划分面板Java的扇区?

java - 为什么JPanel尺寸不对?

java - JTextArea 中是否可以具有非可变尺寸?

java - 如何更改 JTable 或 JScrollpane 大小以适合 JPanel