Events and listeners
 Swing components (overview)
 Swing Layouts
 invokeLater()
 Java Applets
 Windows/Mac OS look and feel

Swing: User Interfaces in Java

Java has a fairly rich framework for creating user interfaces "out of the box". That framework is called Swing. Before learning Swing, it's worth making sure that you really understand the following:

  • the basic concepts of object-oriented programming (e.g. the notion of classes, object creation, inheritance);
  • basic Java syntax: how to call methods, how to create loops etc;
  • interfaces, in the programming sense.

Why am I being so insistent? Essentially, because the Swing framework is highly object-oriented. It contains various classes that extend one another, and the notion of extending a base class to add required functionality to that class is key to user interface programming in Java (and indeed in other languages). Another key part of Swing programming is the notion of listeners: classes or components that "listen out for" a particular event happening such as a button being clicked. And listeners are generally implemented as Java interfaces (in the programming sense), so they're also an important notion to understand. We'll give a brief review of interfaces as we go along, but it helps if you've come across them before.

Introduction to the Swing and user interface packages

Many of the Swing classes representing windows, lists, buttons etc live in the javax.swing package and subpackages. The names of most Swing classes start with the letter J: JFrame, JPanel, JButton, JList etc. In general, if you're looking for the class that represents some visual component in Swing, its name will start with J.

A few classes also live in the java.awt package and subpackages. AWT stands for Abstract Window Toolkit and was in some sense the precursor to Swing. AWT provides a bare-bones way of creating a user interface, based directly on "native" user interface components of the operating system. Swing actually builds on AWT, and some AWT classes are still used directly in Swing programming. For example, many of the classes responsible for laying out user interface components lie inside the java.awt package, and many classes to do with handling events live in java.awt.event; the Graphics interface, which represents a graphics context and is key to rendering graphics inside a window or component, is also originally part of the AWT package.

Example: a first Swing application

By way of a vary basic example which we will extent on the next page, the following application displays a window:

import javax.swing.JFrame;

public class MyApp {
  public static void main(String[] args) {
    // Actually slightly incorrect from a threading point of view
    JFrame frame = new JFrame("My Swing app");
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}

The lines that arguably do most of the work are the ones in bold which construct the window, specifically an instance of JFrame, and then make it visible. We mentioned that user interface components are generally represented by classes inside the javax.swing package with names beginning with J. In this case, a "window with decorations" is strictly speaking called a frame, and represented by the JFrame class. So creating a window means creating an instance of JFrame. We construct one just like most Java objects: by calling its constructor. Note that, as with many constructors, most allow us to specify some common parameters: in this case, the title of the window.

The call to set the size of the window is hopefully self-explanatory once you see it; let us just comment for now that in general, you need to think about the size (and potentially layout) of all windows/components when you're programming with Swing. The call to setDefaultCloseOperation() is a shortcut we can use in the very simple case where we want our application to exit when the window is closed: Swing will dutifully call System.exit() for us. We'll see later that we can customise what happens when a window is closed.

This application as it stands actually has a threading problem that we're going to ignore for now. (If you're interested, see the section on Application startup code in the discussion of SwingUtilities.invokeLater().)

Next: events and listeners

As it stands, there's one major problem with this application: it doesn't do very much. To start "doing" things with Swing, we need to respond to events: mouse clicks, button clicks etc. So on the next page, we get started properly by looking at the concept of events and listeners.

After that, we will look at two other key types of user interface component: text fields and labels.

Other topics: Applets

A topic which in practice is related to Swing is that of writing Java Applets: the mini Java applications which you often see embedded in web pages (and in principle could be embedded in other contexts).


If you enjoy this Java programming article, please share with friends and colleagues. Follow the author on Twitter for the latest news and rants.

Editorial page content written by Neil Coffey. Copyright © Javamex UK 2021. All rights reserved.