add scrollpane to jpanel when the panel is full (java)
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
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.
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, 2020Comments
-
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 aJScrollPane
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(); } } }