Search code examples
javajpaneljscrollpanelayout-managerspringlayout

Adding JPanel to JScrollPane


I have a gui which has a Panel that contains a sequence of labels and TextFields and uses a spring layout(this is the mainPanel) and another Panel that just contains a button(buttonPanel). I am trying to make my mainPanel to have a vertical scrollbar as well. I would like to implement my GUI such that within the JFrame I have 2 panels. The mainPanel appears on the top of the frame and the buttonPanel appears below the mainPanel.

My problem is I am not able to make the Panels appear such that the buttonPanel is below the mainPanel and I am also not sure how to add a scrollbar to the mainPanel. Any help would be appreciated.

EDIT : I was able to solve my issue regarding the JPanels, now my only problem is that I cant get my mainPanel to scroll. I've added my most recent code below :

Here is the code I have so far:

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



        }

Solution

  • To make it scrollable I just needed to increase the preferred size of my mainPanel such that it would be bigger than the scrollbar.

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