How do I put a scrollPane on a BoxLayout?
boxlayout, java, jpanel, jscrollpane, swing
Solution
Simply enclose all the components into `JPanel` first and then add it into `JScrollPane` and finally add `JScrollPane` into `JFrame`s content pane.
Sample code:
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane(panel);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new GroupPanel(1));
panel.add(new GroupPanel(2));
panel.add(new GroupPanel(3));
panel.add(new GroupPanel(4));
panel.add(Box.createVerticalGlue());
f.getContentPane().add(scrollPane);
screenshot;
Problem
I would like to have my `JFrame` that has a `BoxLayout` be able to have a scroll pane so I could just keep adding in Groups like if it was a receipt or invoice printer. Is there a way to add a `ScrollPane`? Question: How to add a ScrollPane to the JFrame? Code, originally seen here: ``` import java.awt.EventQueue; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.GroupLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; /** @see https://stackoverflow.com/a/8504753/230513 */ public class GroupPanel extends JPanel { private static final long serialVersionUID = 1L; private JLabel label1 = new JLabel("Primary:"); private JTextField field1 = new JTextField(16); private JLabel label2 = new JLabel("Secondary:"); private JTextField field2 = new JTextField(16); private JLabel label3 = new JLabel("Tertiary:"); private JTextField field3 = new JTextField(16); JScrollPane sp = new JScrollPane(); public GroupPanel(int n) { this.setBorder(BorderFactory.createTitledBorder("Panel " + n)); GroupLayout l = new GroupLayout(this); this.setLayout(l); l.setAutoCreateGaps(true); l.setAutoCreateContainerGaps(true); l.setHorizontalGroup(l.createSequentialGroup() .addGroup(l.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(label1) .addComponent(label2) .addComponent(label3)) .addGroup(l.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(field1) .addComponent(field2) .addComponent(field3)) ); l.setVerticalGroup(l.createSequentialGroup() .addGroup(l.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(label1) .addComponent(field1)) .addGroup(l.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(label2) .addComponent(field2)) .addGroup(l.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(label3) .addComponent(field3)) ); sp.setToolTipText("test"); sp.add(this); } private static void display() { JFrame f = new JFrame("GroupPanel"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS)); f.getContentPane().add(new GroupPanel(1)); f.getContentPane().add(new GroupPanel(2)); f.getContentPane().add(new GroupPanel(3)); f.getContentPane().add(new GroupPanel(4)); f.getContentPane().add(Box.createVerticalGlue()); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { display(); } }); } } ```