Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 将JPanel添加到JScrollPane_Java_Jpanel_Jscrollpane_Layout Manager_Springlayout - Fatal编程技术网

Java 将JPanel添加到JScrollPane

Java 将JPanel添加到JScrollPane,java,jpanel,jscrollpane,layout-manager,springlayout,Java,Jpanel,Jscrollpane,Layout Manager,Springlayout,我有一个gui,它有一个包含一系列标签和文本字段的面板,使用spring布局(这是主面板)和另一个只包含按钮(buttonPanel)的面板。我试图使我的主面板有一个垂直滚动条以及。我希望实现我的GUI,以便在JFrame中有2个面板。主面板显示在框架顶部,按钮面板显示在主面板下方 我的问题是,我无法使面板显示为按钮面板位于主面板下方,并且我也不确定如何向主面板添加滚动条。任何帮助都将不胜感激 编辑:我能够解决关于JPanel的问题,现在我唯一的问题是我无法让我的主面板滚动。我在下面添加了我的最

我有一个gui,它有一个包含一系列标签和文本字段的面板,使用spring布局(这是主面板)和另一个只包含按钮(buttonPanel)的面板。我试图使我的主面板有一个垂直滚动条以及。我希望实现我的GUI,以便在JFrame中有2个面板。主面板显示在框架顶部,按钮面板显示在主面板下方

我的问题是,我无法使面板显示为按钮面板位于主面板下方,并且我也不确定如何向主面板添加滚动条。任何帮助都将不胜感激

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

以下是我目前掌握的代码:

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



        }
publicstaticvoidmain(字符串参数[]){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scroll=新建JScrollPane();
容器contentPane=frame.getContentPane();
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
SpringLayout布局=新的SpringLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
setLayout(新的BorderLayout());
int j=25;

对于(int i=0;i我将这样做:

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

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

    GridBagConstraints gbc = new GridBagConstraints();

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

        gbc.gridx = 0;
        gbc.gridy = i;

        mainPanel.add(label, gbc);

        gbc.gridx = 1;
        mainPanel.add(text, gbc);
    }
    contentPane.add(new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
    contentPane.add(buttonPanel, BorderLayout.SOUTH);
    frame.setSize(500, 800);
    frame.setVisible(true);
}
publicstaticvoidmain(字符串参数[]){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
容器contentPane=frame.getContentPane();
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
GridBagLayout=新的GridBagLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
setLayout(新的BorderLayout());
GridBagConstraints gbc=新的GridBagConstraints();
int j=25;
对于(int i=0;i<50;i++){
JLabel标签=新的JLabel(“输入名称(“+i+”));
JTextField text=新的JTextField(15);
gbc.gridx=0;
gbc.gridy=i;
主面板。添加(标签,gbc);
gbc.gridx=1;
主面板。添加(文本,gbc);
}
添加(新的JScrollPane(主面板,JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS,JScrollPane.HORIZONTAL\u SCROLLBAR\u根据需要)、BorderLayout.CENTER);
添加(buttonPanel,BorderLayout.SOUTH);
框架设置尺寸(500800);
frame.setVisible(true);
}
少量修改: *使用GridBagLayout而不是SpringLayout(只是因为我不知道SpringLayout) *将主面板包装在JScrollPane中

外观和感觉与您的示例不完全相同。GridBagConstraints可以调整。

  • 我不能评论什么,试着比较一下

  • 注意,在这一刻我不明白为什么
    SpringLayout
    JFrame#pack()
    没有基于
    PreferredSize
    构建正确的GUI,在这一刻,碰撞看起来也像是我的问题

使用硬编码的
JFrame.setSize()
而不是正确的
JFrame\pack()

导入java.awt.BorderLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SpringLayout;
导入javax.swing.SwingUtilities;
公共班机{
公用干管(){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
SpringLayout布局=新的SpringLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
int j=25;
对于(int i=0;i<5;i++){
JLabel标签=新的JLabel(“输入名称”);
JTextField text=新的JTextField(15);
布局.putConstraint(SpringLayout.WEST,label,10,SpringLayout.WEST,
主面板);
layout.putConstraint(SpringLayout.NORTH,标签,j,SpringLayout.NORTH,
主面板);
布局.putConstraint(SpringLayout.NORTH,text,j,SpringLayout.NORTH,
主面板);
布局.putConstraint(SpringLayout.WEST,text,20,SpringLayout.EAST,
标签);
j+=30;
主面板。添加(标签);
主面板。添加(文本);
}
frame.add(主面板,BorderLayout.CENTER);
框架。添加(按钮面板,边框布局。南);
框架。设置尺寸(300300);
frame.setVisible(true);
}
公共静态void main(字符串参数[]){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
Main mn=新的Main();
}
});
}
}

要使其可滚动,我只需要增加主面板的首选大小,使其比滚动条大

 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);
        }
publicstaticvoidmain(字符串参数[]){
JFrame=新JFrame(“SpringLayout”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane scroll=新建JScrollPane();
容器contentPane=frame.getContentPane();
JButton next=新JButton(“next”);
JPanel buttonPanel=新的JPanel();
按钮面板。添加(下一步);
SpringLayout布局=新的SpringLayout();
JPanel mainPanel=新的JPanel();
主面板。设置布局(布局);
setLayout(新的BorderLayout());
int j=25;

对于(int i=0;我认为这是个好问题+1
 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);
        }