Package javax.swing
Provides a set of "lightweight" (all-Java language) components that, to the maximum degree possible, work the same on all platforms. For a programmer's guide to using these components, see Creating a GUI with JFC/Swing, a trail in The Java Tutorial. For other resources, see Related Documentation.
Swing's Threading Policy
In general Swing is not thread safe. All Swing components and related classes, unless otherwise documented, must be accessed on the event dispatching thread. Typical Swing applications do processing in response to an event generated from a user gesture. For example, clicking on a JButton
notifies all ActionListeners
added to the JButton
. As all events generated from a user gesture are dispatched on the event dispatching thread, most developers are not impacted by the restriction.
Where the impact lies, however, is in constructing and showing a Swing application. Calls to an application's main
method, or methods in Applet
, are not invoked on the event dispatching thread. As such, care must be taken to transfer control to the event dispatching thread when constructing and showing an application or applet. The preferred way to transfer control and begin working with Swing is to use invokeLater
. The invokeLater
method schedules a Runnable
to be processed on the event dispatching thread. The following two examples work equally well for transferring control and starting up a Swing application:
import javax.swing.SwingUtilities; public class MyApp implements Runnable { public void run() { // Invoked on the event dispatching thread. // Construct and show GUI. } public static void main(String[] args) { SwingUtilities.invokeLater(new MyApp()); } }Or:
import javax.swing.SwingUtilities; public class MyApp { MyApp(String[] args) { // Invoked on the event dispatching thread. // Do any initialization here. } public void show() { // Show the UI. } public static void main(final String[] args) { // Schedule a job for the event-dispatching thread: // creating and showing this application's GUI. SwingUtilities.invokeLater(new Runnable() { public void run() { new MyApp(args).show(); } }); } }This restriction also applies to models attached to Swing components. For example, if a
TableModel
is attached to a JTable
, the TableModel
should only be modified on the event dispatching thread. If you modify the model on a separate thread you run the risk of exceptions and possible display corruption. Although it is generally safe to make updates to the UI immediately, when executing on the event dispatch thread, there is an exception : if a model listener tries to further change the UI before the UI has been updated to reflect a pending change then the UI may render incorrectly. This can happen if an application installed listener needs to update the UI in response to an event which will cause a change in the model structure. It is important to first allow component installed listeners to process this change, since there is no guarantee of the order in which listeners may be called. The solution is for the application listener to make the change using SwingUtilities.invokeLater
so that any changes to UI rendering will be done post processing all the model listeners installed by the component.
As all events are delivered on the event dispatching thread, care must be taken in event processing. In particular, a long running task, such as network io or computational intensive processing, executed on the event dispatching thread blocks the event dispatching thread from dispatching any other events. While the event dispatching thread is blocked the application is completely unresponsive to user input. Refer to SwingWorker
for the preferred way to do such processing when working with Swing.
More information on this topic can be found in the Swing tutorial, in particular the section on Concurrency in Swing.
Related Documentation
For overviews, tutorials, examples, guides, and other documentation, please see:- The Swing Connection
- The Java Tutorial
- Online Training at the Java Developer Connection SM
- Java Foundation Classes (JFC) home page
Interface | Description |
---|---|
Action | The |
BoundedRangeModel | Defines the data model used by components like |
ButtonModel | State model for buttons. |
CellEditor | This interface defines the methods any general editor should be able to implement. |
ComboBoxEditor | The editor component used for JComboBox components. |
ComboBoxModel<E> | A data model for a combo box. |
DesktopManager | DesktopManager objects are owned by a JDesktopPane object. |
Icon | A small fixed size picture, typically used to decorate components. |
JComboBox.KeySelectionManager | The interface that defines a |
ListCellRenderer<E> | Identifies components that can be used as "rubber stamps" to paint the cells in a JList. |
ListModel<E> | This interface defines the methods components like JList use to get the value of each cell in a list and the length of the list. |
ListSelectionModel | This interface represents the current state of the selection for any of the components that display a list of values with stable indices. |
MenuElement | Any component that can be placed into a menu should implement this interface. |
MutableComboBoxModel<E> | A mutable version of |
Painter<T> | A painting delegate. |
Renderer | Defines the requirements for an object responsible for "rendering" (displaying) a value. |
RootPaneContainer | This interface is implemented by components that have a single JRootPane child: JDialog, JFrame, JWindow, JApplet, JInternalFrame. |
Scrollable | An interface that provides information to a scrolling container like JScrollPane. |
ScrollPaneConstants | Constants used with the JScrollPane component. |
SingleSelectionModel | A model that supports at most one indexed selection. |
SpinnerModel | A model for a potentially unbounded sequence of object values. |
SwingConstants | A collection of constants generally used for positioning and orienting components on the screen. |
UIClientPropertyKey | This interface is used only for tagging keys for client properties for |
UIDefaults.ActiveValue | This class enables one to store an entry in the defaults table that's constructed each time it's looked up with one of the |
UIDefaults.LazyValue | This class enables one to store an entry in the defaults table that isn't constructed until the first time it's looked up with one of the |
WindowConstants | Constants used to control the window-closing operation. |
Class | Description |
---|---|
AbstractAction | This class provides default implementations for the JFC |
AbstractButton | Defines common behaviors for buttons and menu items. |
AbstractCellEditor | A base class for |
AbstractListModel<E> | The abstract definition for the data model that provides a |
AbstractSpinnerModel | This class provides the ChangeListener part of the SpinnerModel interface that should be suitable for most concrete SpinnerModel implementations. |
ActionMap |
|
BorderFactory | Factory class for vending standard |
Box | A lightweight container that uses a BoxLayout object as its layout manager. |
Box.Filler | An implementation of a lightweight component that participates in layout but has no view. |
BoxLayout | A layout manager that allows multiple components to be laid out either vertically or horizontally. |
ButtonGroup | This class is used to create a multiple-exclusion scope for a set of buttons. |
CellRendererPane | This class is inserted in between cell renderers and the components that use them. |
ComponentInputMap | A |
DebugGraphics | Graphics subclass supporting graphics debugging. |
DefaultBoundedRangeModel | A generic implementation of BoundedRangeModel. |
DefaultButtonModel | The default implementation of a |
DefaultCellEditor | The default editor for table and tree cells. |
DefaultComboBoxModel<E> | The default model for combo boxes. |
DefaultDesktopManager | This is an implementation of the |
DefaultFocusManager | This class has been obsoleted by the 1.4 focus APIs. |
DefaultListCellRenderer | Renders an item in a list. |
DefaultListCellRenderer.UIResource | A subclass of DefaultListCellRenderer that implements UIResource. |
DefaultListModel<E> | This class loosely implements the |
DefaultListSelectionModel | Default data model for list selections. |
DefaultRowSorter<M,I> | An implementation of |
DefaultRowSorter.ModelWrapper<M,I> |
|
DefaultSingleSelectionModel | A generic implementation of SingleSelectionModel. |
FocusManager | This class has been obsoleted by the 1.4 focus APIs. |
GrayFilter | An image filter that "disables" an image by turning it into a grayscale image, and brightening the pixels in the image. |
GroupLayout |
|
ImageIcon | An implementation of the Icon interface that paints Icons from Images. |
InputMap |
|
InputVerifier | This class provides the validation mechanism for Swing components. |
InternalFrameFocusTraversalPolicy | A FocusTraversalPolicy which can optionally provide an algorithm for determining a JInternalFrame's initial Component. |
JApplet | Deprecated. The Applet API is deprecated, no replacement. |
JButton | An implementation of a "push" button. |
JCheckBox | An implementation of a check box -- an item that can be selected or deselected, and which displays its state to the user. |
JCheckBoxMenuItem | A menu item that can be selected or deselected. |
JColorChooser |
|
JComboBox<E> | A component that combines a button or editable field and a drop-down list. |
JComponent | The base class for all Swing components except top-level containers. |
JDesktopPane | A container used to create a multiple-document interface or a virtual desktop. |
JDialog | The main class for creating a dialog window. |
JEditorPane | A text component to edit various kinds of content. |
JFileChooser |
|
JFormattedTextField |
|
JFormattedTextField.AbstractFormatter | Instances of |
JFormattedTextField.AbstractFormatterFactory | Instances of |
JFrame | An extended version of |
JInternalFrame | A lightweight object that provides many of the features of a native frame, including dragging, closing, becoming an icon, resizing, title display, and support for a menu bar. |
JInternalFrame.JDesktopIcon | This component represents an iconified version of a |
JLabel | A display area for a short text string or an image, or both. |
JLayer<V extends Component> |
|
JLayeredPane |
|
JList<E> | A component that displays a list of objects and allows the user to select one or more items. |
JList.DropLocation | A subclass of |
JMenu | An implementation of a menu -- a popup window containing |
JMenuBar | An implementation of a menu bar. |
JMenuItem | An implementation of an item in a menu. |
JOptionPane |
|
JPanel |
|
JPasswordField |
|
JPopupMenu | An implementation of a popup menu -- a small window that pops up and displays a series of choices. |
JPopupMenu.Separator | A popup menu-specific separator. |
JProgressBar | A component that visually displays the progress of some task. |
JRadioButton | An implementation of a radio button -- an item that can be selected or deselected, and which displays its state to the user. |
JRadioButtonMenuItem | An implementation of a radio button menu item. |
JRootPane | A lightweight container used behind the scenes by |
JScrollBar | An implementation of a scrollbar. |
JScrollPane | Provides a scrollable view of a lightweight component. |
JSeparator |
|
JSlider | A component that lets the user graphically select a value by sliding a knob within a bounded interval. |
JSpinner | A single line input field that lets the user select a number or an object value from an ordered sequence. |
JSpinner.DateEditor | An editor for a |
JSpinner.DefaultEditor | A simple base class for more specialized editors that displays a read-only view of the model's current value with a |
JSpinner.ListEditor | An editor for a |
JSpinner.NumberEditor | An editor for a |
JSplitPane |
|
JTabbedPane | A component that lets the user switch between a group of components by clicking on a tab with a given title and/or icon. |
JTable | The |
JTable.DropLocation | A subclass of |
JTextArea | A |
JTextField |
|
JTextPane | A text component that can be marked up with attributes that are represented graphically. |
JToggleButton | An implementation of a two-state button. |
JToggleButton.ToggleButtonModel | The ToggleButton model |
JToolBar |
|
JToolBar.Separator | A toolbar-specific separator. |
JToolTip | Used to display a "Tip" for a Component. |
JTree | A control that displays a set of hierarchical data as an outline. |
JTree.DropLocation | A subclass of |
JTree.DynamicUtilTreeNode |
|
JTree.EmptySelectionModel |
|
JViewport | The "viewport" or "porthole" through which you see the underlying information. |
JWindow | A |
KeyStroke | A KeyStroke represents a key action on the keyboard, or equivalent input device. |
LayoutFocusTraversalPolicy | A SortingFocusTraversalPolicy which sorts Components based on their size, position, and orientation. |
LayoutStyle |
|
LookAndFeel |
|
MenuSelectionManager | A MenuSelectionManager owns the selection in menu hierarchy. |
OverlayLayout | A layout manager to arrange components over the top of each other. |
Popup | Popups are used to display a |
PopupFactory |
|
ProgressMonitor | A class to monitor the progress of some operation. |
ProgressMonitorInputStream | Monitors the progress of reading from some InputStream. |
RepaintManager | This class manages repaint requests, allowing the number of repaints to be minimized, for example by collapsing multiple requests into a single repaint for members of a component tree. |
RowFilter<M,I> |
|
RowFilter.Entry<M,I> | An |
RowSorter<M> |
|
RowSorter.SortKey | SortKey describes the sort order for a particular column. |
ScrollPaneLayout | The layout manager used by |
ScrollPaneLayout.UIResource | The UI resource version of |
SizeRequirements | For the convenience of layout managers, calculates information about the size and position of components. |
SizeSequence | A |
SortingFocusTraversalPolicy | A FocusTraversalPolicy that determines traversal order by sorting the Components of a focus traversal cycle based on a given Comparator. |
SpinnerDateModel | A |
SpinnerListModel | A simple implementation of |
SpinnerNumberModel | A |
Spring | An instance of the |
SpringLayout | A |
SpringLayout.Constraints | A |
SwingUtilities | A collection of utility methods for Swing. |
SwingWorker<T,V> | An abstract class to perform lengthy GUI-interaction tasks in a background thread. |
Timer | Fires one or more |
ToolTipManager | Manages all the |
TransferHandler | This class is used to handle the transfer of a |
TransferHandler.DropLocation | Represents a location where dropped data should be inserted. |
TransferHandler.TransferSupport | This class encapsulates all relevant details of a clipboard or drag and drop transfer, and also allows for customizing aspects of the drag and drop experience. |
UIDefaults | A table of defaults for Swing components. |
UIDefaults.LazyInputMap |
|
UIDefaults.ProxyLazyValue | This class provides an implementation of |
UIManager |
|
UIManager.LookAndFeelInfo | Provides a little information about an installed |
ViewportLayout | The default layout manager for |
Enum | Description |
---|---|
DropMode | Drop modes, used to determine the method by which a component tracks and indicates a drop location during drag and drop. |
GroupLayout.Alignment | Enumeration of the possible ways |
JTable.PrintMode | Printing modes, used in printing |
LayoutStyle.ComponentPlacement |
|
RowFilter.ComparisonType | Enumeration of the possible comparison values supported by some of the default |
SortOrder | SortOrder is an enumeration of the possible sort orderings. |
SwingWorker.StateValue | Values for the |
Exception | Description |
---|---|
UnsupportedLookAndFeelException | An exception that indicates the requested look & feel management classes are not present on the user's system. |
Annotation Type | Description |
---|---|
SwingContainer | An annotation used to specify some swing-related information for the automatically generated |
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/package-summary.html