JPanel  is a Swing’s lightweight container which is used to group a set of components together. JPanel is a pretty simple component which, normally, does not have a GUI (except when it is being set an opaque background or has a visual border).

In this article, we summarize the common practices when working with JPanel in Swing. At the end, we will create a sample program looks like this:

 JPanel demo program 2

Table of content:

  1. Creating a new JPanel
  2. Setting a layout manager
  3. Adding components to the panel
  4. Adding the panel to a parent container
  5. Customizing appearance
  6. Sample application
 

1. Creating a new JPanel

The JPanel class resides in the package javax.swing and it’s a subclass of the javax.swing.JComponent class.

// use grid bag layout and no double buffering:
JPanel newPanel = new JPanel(new GridBagLayout(), false);
 

2. Setting a layout manager for JPanel

// exception:
JPanel newPanel = new JPanel();
newPanel.setLayout(new BoxLayout(newPanel, BoxLayout.X_AXIS));
  

3. Adding components to JPanel



To add GUI components such as JLabel, JTextField, JButton... to the panel, we use the add() method. There are different versions of the add() method, so which method to be used is depending on the layout manager of the panel.

JPanel wizardPanel = new JPanel(new CardLayout());
wizardPanel.add("Step1", step1Panel);
wizardPanel.add("Step2", step2Panel);
 

4. Adding JPanel to a parent container

The panel cannot stand alone. It must be added to a parent container such as a JFrame or another JPanel. For example:

frame.add(newPanel);
anotherPanel.add(newPanel);
  

5. Customizing appearance for JPanel

Normally, a JPanel does not render its own GUI. However we can set its background color, transparent background or border when necessary.

newPanel.setBorder(BorderFactory.createTitledBorder(
		BorderFactory.createEtchedBorder(), "Login Panel")); 

 

6. JPanel Sample application

We created the following program to demonstrate the typical usages of JPanel in a Swing application. The program uses a JPanel to group some labels, textfields and a button to form a login panel as follows:

JPanel demo program

As you can notice, the panel used in this program has a titled border “Login Panel”. Here is complete source code of the program:

package net.codejava.swing.jpanel;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

/**
 * This program demonstrates how to use JPanel in Swing. 
 * @author www.codejava.net
 */
public class SwingJPanelDemo extends JFrame {
	
	private JLabel labelUsername = new JLabel("Enter username: ");
	private JLabel labelPassword = new JLabel("Enter password: ");
	private JTextField textUsername = new JTextField(20);
	private JPasswordField fieldPassword = new JPasswordField(20);
	private JButton buttonLogin = new JButton("Login");
	
	public SwingJPanelDemo() {
		super("JPanel Demo Program");
		
		// create a new panel with GridBagLayout manager
		JPanel newPanel = new JPanel(new GridBagLayout());
		
		GridBagConstraints constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.WEST;
		constraints.insets = new Insets(10, 10, 10, 10);
		
		// add components to the panel
		constraints.gridx = 0;
		constraints.gridy = 0;		
		newPanel.add(labelUsername, constraints);

		constraints.gridx = 1;
		newPanel.add(textUsername, constraints);
		
		constraints.gridx = 0;
		constraints.gridy = 1;		
		newPanel.add(labelPassword, constraints);
		
		constraints.gridx = 1;
		newPanel.add(fieldPassword, constraints);
		
		constraints.gridx = 0;
		constraints.gridy = 2;
		constraints.gridwidth = 2;
		constraints.anchor = GridBagConstraints.CENTER;
		newPanel.add(buttonLogin, constraints);
		
		// set border for the panel	
		newPanel.setBorder(BorderFactory.createTitledBorder(
				BorderFactory.createEtchedBorder(), "Login Panel"));
		
		// add the panel to this frame
		add(newPanel);
		
		pack();
		setLocationRelativeTo(null);
	}
	
	public static void main(String[] args) {
		// set look and feel to the system look and feel
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new SwingJPanelDemo().setVisible(true);
			}
		});
	}
}
You can download the code as well as an executable jar file of this program in the attachments section.

 

Other Java Swing Tutorials:


About the Author:

is certified Java programmer (SCJP and SCWCD). He started programming with Java in the time of Java 1.4 and has been falling in love with Java since then. Make friend with him on Facebook and watch his Java videos you YouTube.



Attachments:
Download this file (SwingJPanelDemo.zip)SwingJPanelDemo.zip[Source code and runnable jar file]7 kB