add scrollpane to jpanel when the panel is full (java)

22,332

Solution 1

Here you go

    // Construct panel
    //panel.setPreferredSize(new Dimension(600, 600)); // No need for panel as it will get added to scrollpane
    panel.setLayout(new GridBagLayout());
    panel.setBorder(LineBorder.createBlackLineBorder());


    JScrollPane scrollPane = new JScrollPane(panel,   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPane.setPreferredSize(new Dimension(600, 600));
    // Add panel to frame
    frameConstraints.gridx = 0;
    frameConstraints.gridy = 1;
    frameConstraints.weighty = 1;
    frame.add(scrollPane, frameConstraints); // add acrollpane to frame

I have created a JScrollPane, added panel as its component and then added scrollPane to frame

Here enter image description here

Solution 2

Add panel into JScrollPane, but create ScrollPane by this constractor

JScrollPane scrollPane = new JScrollPane(panel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

ScrollBars became visible only when panel size became bigger then parent component size.

Solution 3

On you jscrollpane you need to set vertical and horizontal bar schemes. for example

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;


public class windows_test {
    JFrame login = null;
    JFrame inner_frame = null;

    public windows_test() {
        login = new JFrame();
        login.setBounds(10, 10, 300, 300);
        login.setLayout(new BorderLayout());

        JPanel temp_panel = new JPanel();

        temp_panel.add(new JTextArea("asd fsj   adhf jsad kjfh sa dj kfh j sak ds fda f hsa kj d hf ks ad hf kjs ad h fk js ad h fjs da hf k j sahd kjfsh d jk fhs ad"));

        login.setVisible(true);
        JScrollPane scroll_pane = new JScrollPane(temp_panel);
        scroll_pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); //SETTING SCHEME FOR HORIZONTAL BAR
        scroll_pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        login.add(scroll_pane);
    }
}

hope it will help you. if you are facing any problem then you can ask i will try to solve it.

Solution 4

frame = new JFrame();
frame.setBounds(0, 0, 820, 950);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JPanel panel = new JPanel();
panel.setLayout(null);

final JScrollPane scrollPanel = new JScrollPane(
    panel,
    ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS
);
scrollPanel.setBounds(0, 0, 800, 900);
panel.setBounds(0, 0, 1920, 1080);
panel.setPreferredSize(new Dimension(1920, 1080));
frame.getContentPane().add(scrollPanel);

This code will work in general to add JScrollPane to JPanel. Adjust bounds of frame, panel and scrollpane according to your requirements but ensure that the bounds of JScrollPane are within the bounds of the frame otherwise the scrollpane will not be visible.

Share:
22,332
Adel Bachene
Author by

Adel Bachene

6+ Years of diversified experience in software engineering. Passionate about Big Data and Backend Development. Full-stack Web Developer: in the past 3 years I have been working as a full-stack Web Developer responsible for designing new systems and building scalable web applications, involved in the full life-cycle of software development. I’ve been gathering requirements from project owners, distributing responsibilities as a Scrum Master, preparing the infrastructure, building the architecture, choosing the technology, coding, preparing deployment pipeline and in the same time debugging and maintaining the existing systems. Artificial Intelligence / Machine Learning: I did my Master Degree Research on emotion recognition from facial expressions and I developed an application using OPENCV library. See it in action: https://youtu.be/lC9jGVGSv28. Mobile applications: I have some experience on developing Android apps on a freelance basis and strong experience in developing backend systems for mobile apps using REST or GraphQL Self-motivated, Patient, Prepared to learn new skills and able to work in any demanding operational environment. Because I love what I do and I strive to be the best in what I do.

Updated on May 08, 2020

Comments

  • Adel Bachene
    Adel Bachene almost 4 years

    I am working on java swing application and I am adding components dynamically in a JPanel. I want to set a JScrollPane on this panel and only if the panel is full we can see this scrollpane.

    How can I do it on this :

     package add_button;
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.LineBorder;
    
    public class MyExample 
    {
        // Field members
        static JPanel panel = new JPanel();
        static Integer indexer = 1;
        static List<JLabel> listOfLabels = new ArrayList<JLabel>();
        static List<JTextField> listOfTextFields = new ArrayList<JTextField>();
    
        public static void main(String[] args)
        {       
            // Construct frame
            JFrame frame = new JFrame();
            frame.setLayout(new GridBagLayout());
            frame.setPreferredSize(new Dimension(990, 990));
            frame.setTitle("My Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // Frame constraints
            GridBagConstraints frameConstraints = new GridBagConstraints();
    
            // Construct button
            JButton addButton = new JButton("Add");
            addButton.addActionListener(new ButtonListener());
    
            // Add button to frame
            frameConstraints.gridx = 0;
            frameConstraints.gridy = 0;
            frame.add(addButton, frameConstraints);
    
            // Construct panel
            panel.setPreferredSize(new Dimension(600, 600));
            panel.setLayout(new GridBagLayout());
            panel.setBorder(LineBorder.createBlackLineBorder());
    
            // Add panel to frame
            frameConstraints.gridx = 0;
            frameConstraints.gridy = 1;
            frameConstraints.weighty = 1;
            frame.add(panel, frameConstraints);
    
            // Pack frame
            frame.pack();
    
            // Make frame visible
            frame.setVisible(true);
        }
    
        static class ButtonListener implements ActionListener
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {       
                // Clear panel
                panel.removeAll();
    
                // Create label and text field
                JTextField jTextField = new JTextField();
                jTextField.setSize(100, 200);
                listOfTextFields.add(jTextField);
                listOfLabels.add(new JLabel("Label " + indexer));
    
                // Create constraints
                GridBagConstraints textFieldConstraints = new GridBagConstraints();
                GridBagConstraints labelConstraints = new GridBagConstraints();
    
                // Add labels and text fields
                for(int i = 0; i < indexer; i++)
                {
                    // Text field constraints
                    textFieldConstraints.gridx = 1;
                    textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
                    textFieldConstraints.weightx = 0.5;
                    textFieldConstraints.insets = new Insets(10, 10, 10, 10);
                    textFieldConstraints.gridy = i;
    
                    // Label constraints
                    labelConstraints.gridx = 0;
                    labelConstraints.gridy = i;
                    labelConstraints.insets = new Insets(10, 10, 10, 10);
    
                    // Add them to panel
                    panel.add(listOfLabels.get(i), labelConstraints);
                    panel.add(listOfTextFields.get(i), textFieldConstraints);
                }
    
                // Align components top-to-bottom
                GridBagConstraints c = new GridBagConstraints();
                c.gridx = 0;
                c.gridy = indexer;
                c.weighty = 1;
                panel.add(new JLabel(), c);
    
                // Increment indexer
                indexer++;
                panel.updateUI();
            }
        }
    }