Пакет javax.swing
Политика Swing в отношении потоков
В общем случае Swing не является потокобезопасным. Доступ ко всем компонентам Swing и связанным с ними классам, если в документации не указано иное, должен осуществляться из потока диспетчеризации событий. Типичные приложения Swing выполняют обработку в ответ на событие, вызванное действием пользователя. Например, щелчок по JButton уведомляет все ActionListeners, добавленные в JButton. Поскольку все события, вызванные действиями пользователя, обрабатываются в потоке диспетчеризации событий, это ограничение не затрагивает большинство разработчиков.
Однако ограничение имеет значение при создании и отображении приложения Swing. Вызовы метода main приложения или методов в Applet не выполняются в потоке диспетчеризации событий. Поэтому при создании и отображении приложения или апплета необходимо передать управление потоку диспетчеризации событий. Предпочтительный способ передать управление и начать работу с Swing — использовать invokeLater. Метод invokeLater планирует выполнение Runnable в потоке диспетчеризации событий. Следующие два примера одинаково подходят для передачи управления и запуска приложения Swing:
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());
}
} Или:
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();
}
});
}
} Это ограничение также распространяется на модели, связанные с компонентами Swing. Например, если TableModel связан с JTable, изменять TableModel следует только в потоке диспетчеризации событий. Если изменить модель в отдельном потоке, существует риск возникновения исключений и возможного искажения отображения. Хотя обычно безопасно немедленно обновлять пользовательский интерфейс при выполнении в потоке диспетчеризации событий, есть одно исключение: если слушатель модели пытается дополнительно изменить пользовательский интерфейс до того, как тот обновится с учетом ожидающего изменения, интерфейс может отображаться неправильно. Это может произойти, если установленный приложением слушатель должен обновить пользовательский интерфейс в ответ на событие, которое приведет к изменению структуры модели. Важно сначала позволить слушателям, установленным компонентом, обработать это изменение, поскольку порядок вызова слушателей не гарантируется. Решение состоит в том, чтобы слушатель приложения выполнил изменение с помощью SwingUtilities.invokeLater(Runnable), чтобы все изменения отображения пользовательского интерфейса выполнялись после обработки всех слушателей модели, установленных компонентом.
Поскольку все события доставляются в потоке диспетчеризации событий, при их обработке необходимо соблюдать осторожность. В частности, длительная задача, например сетевой ввод-вывод или ресурсоемкие вычисления, выполняемая в потоке диспетчеризации событий, не позволяет этому потоку обрабатывать другие события. Пока поток диспетчеризации событий заблокирован, приложение полностью перестает реагировать на действия пользователя. О предпочтительном способе выполнения такой обработки при работе с Swing см. в документации по SwingWorker.
Дополнительные сведения по этой теме можно найти в учебном руководстве по Swing, в частности в разделе Параллельное выполнение в Swing.
Политика Swing в отношении сериализации
Предупреждение: сериализованные объекты любого класса Swing не будут совместимы с будущими версиями Swing. Текущая поддержка сериализации предназначена для краткосрочного хранения или RMI между приложениями, работающими с одной и той же версией Swing. Начиная с версии 1.4 в пакетjava.beans добавлена поддержка долгосрочного хранения всех JavaBeans. Связанная документация
Обзоры, учебные материалы, примеры, руководства и другую документацию см. здесь:- С момента выпуска:
- 1.2
| Класс | Описание |
|---|---|
| AbstractAction | Этот класс предоставляет реализации по умолчанию для интерфейса JFC Action. |
| AbstractButton | Определяет общее поведение кнопок и элементов меню. |
| AbstractCellEditor | Базовый класс для CellEditors, предоставляющий реализации по умолчанию для методов интерфейса CellEditor, за исключением getCellEditorValue(). |
| AbstractListModel<E> | Абстрактное определение модели данных, предоставляющей List своё содержимое. |
| AbstractSpinnerModel | Этот класс предоставляет часть интерфейса SpinnerModel, отвечающую за ChangeListener, и подходит для большинства конкретных реализаций SpinnerModel. |
| Action | Интерфейс Action полезно расширяет интерфейс ActionListener в тех случаях, когда одна и та же функциональность доступна через несколько элементов управления. |
| ActionMap | ActionMap сопоставляет Objects (называемые ключами или именами Action) с Actions. |
| BorderFactory | Фабричный класс для создания стандартных объектов Border. |
| BoundedRangeModel | Определяет модель данных, используемую такими компонентами, как Sliders и ProgressBars. |
| Box | Легковесный контейнер, использующий объект BoxLayout в качестве менеджера компоновки. |
| Box.Filler | Реализация легковесного компонента, участвующего в компоновке, но не имеющего представления. |
| BoxLayout | Менеджер компоновки, позволяющий размещать несколько компонентов вертикально или горизонтально. |
| ButtonGroup | Этот класс используется для создания области взаимного исключения для набора кнопок. |
| ButtonModel | Модель состояния кнопок. |
| CellEditor | Этот интерфейс определяет методы, которые должен уметь реализовывать любой универсальный редактор. |
| CellRendererPane | Этот класс помещается между средствами отображения ячеек и использующими их компонентами. |
| ComboBoxEditor | Компонент редактора, используемый компонентами JComboBox. |
| ComboBoxModel<E> | Модель данных для раскрывающегося списка. |
| ComponentInputMap | ComponentInputMap — это InputMap, связанный с определённым JComponent. |
| DebugGraphics | Подкласс Graphics, поддерживающий отладку графики. |
| DefaultBoundedRangeModel | Универсальная реализация BoundedRangeModel. |
| DefaultButtonModel | Реализация модели данных компонента Button по умолчанию. |
| DefaultCellEditor | Редактор ячеек таблиц и деревьев по умолчанию. |
| DefaultComboBoxModel<E> | Модель раскрывающихся списков по умолчанию. |
| DefaultDesktopManager | Это реализация DesktopManager. |
| DefaultFocusManager | Этот класс устарел в связи с появлением API фокуса версии 1.4. |
| DefaultListCellRenderer | Отображает элемент списка. |
| DefaultListCellRenderer.UIResource | Подкласс DefaultListCellRenderer, реализующий UIResource. |
| DefaultListModel<E> | Этот класс частично реализует API java.util.Vector: он реализует версию java.util.Vector 1.1.x, не поддерживает классы коллекций и уведомляет ListDataListeners об изменениях. |
| DefaultListSelectionModel | Модель данных выбора элементов списка по умолчанию. |
|
DefaultRowSorter<M, |
Реализация RowSorter, обеспечивающая сортировку и фильтрацию табличной модели данных. |
|
DefaultRowSorter.ModelWrapper<M, |
DefaultRowSorter.ModelWrapper отвечает за предоставление данных, сортируемых с помощью DefaultRowSorter. |
| DefaultSingleSelectionModel | Универсальная реализация SingleSelectionModel. |
| DesktopManager | Объекты DesktopManager принадлежат объекту JDesktopPane. |
| DropMode | Режимы перетаскивания, определяющие способ отслеживания компонентом места сброса и его отображения во время перетаскивания. |
| FocusManager | Этот класс устарел в связи с появлением API фокуса версии 1.4. |
| GrayFilter | Фильтр изображений, который «отключает» изображение, преобразуя его в оттенки серого и увеличивая яркость пикселей. |
| GroupLayout | GroupLayout — это LayoutManager, который иерархически группирует компоненты, чтобы расположить их в Container. |
| GroupLayout.Alignment | Перечисление возможных способов выравнивания дочерних элементов в ParallelGroup. |
| Icon | Небольшое изображение фиксированного размера, обычно используемое для оформления компонентов. |
| ImageIcon | Реализация интерфейса Icon, которая рисует значки на основе изображений. |
| InputMap | InputMap связывает событие ввода (в настоящее время используются только KeyStrokes) с Object. |
| InputVerifier | Этот класс предоставляет механизм проверки данных для компонентов Swing. |
| InternalFrameFocusTraversalPolicy | FocusTraversalPolicy, который при необходимости может предоставить алгоритм определения начального Component для JInternalFrame. |
| JApplet | Устарело, планируется удаление: этот элемент API может быть удалён в будущей версии. API Applet устарел, замены нет. |
| JButton | Реализация кнопки «нажать». |
| JCheckBox | Реализация флажка — элемента, который можно установить или снять и который отображает своё состояние пользователю. |
| JCheckBoxMenuItem | Элемент меню, который можно установить или снять. |
| JColorChooser | JColorChooser предоставляет панель элементов управления, позволяющую пользователю изменять и выбирать цвет. |
| JComboBox<E> | Компонент, объединяющий кнопку или редактируемое поле с раскрывающимся списком. |
| JComboBox.KeySelectionManager | Интерфейс, определяющий KeySelectionManager. |
| JComponent | Базовый класс для всех компонентов Swing, кроме контейнеров верхнего уровня. |
| JDesktopPane | Контейнер для создания интерфейса с несколькими документами или виртуального рабочего стола. |
| JDialog | Основной класс для создания диалогового окна. |
| JEditorPane | Текстовый компонент для редактирования содержимого различных типов. |
| JFileChooser | JFileChooser предоставляет пользователю простой механизм выбора файла. |
| JFormattedTextField | JFormattedTextField расширяет JTextField, добавляя поддержку форматирования произвольных значений, а также получения определённого объекта после редактирования текста пользователем. |
| JFormattedTextField.AbstractFormatter | Экземпляры AbstractFormatter используются классом JFormattedTextField для преобразования объекта в строку и обратно — строки в объект. |
| JFormattedTextField.AbstractFormatterFactory | Экземпляры AbstractFormatterFactory используются классом JFormattedTextField для получения экземпляров AbstractFormatter, которые затем применяются для форматирования значений. |
| JFrame | Расширенная версия java.awt.Frame, добавляющая поддержку архитектуры компонентов JFC/Swing. |
| JInternalFrame | Легковесный объект, предоставляющий многие возможности собственного окна, включая перетаскивание, закрытие, сворачивание в значок, изменение размера, отображение заголовка и поддержку строки меню. |
| JInternalFrame.JDesktopIcon | Этот компонент представляет свёрнутую в значок версию JInternalFrame. |
| JLabel | Область отображения короткой текстовой строки, изображения или того и другого. |
| JLayer<V extends Component> | JLayer — это универсальный декоратор компонентов Swing, позволяющий реализовывать различные расширенные эффекты рисования, а также получать уведомления обо всех AWTEvents, возникающих в его пределах. |
| JLayeredPane | JLayeredPane добавляет глубину контейнеру JFC/Swing, позволяя компонентам при необходимости перекрывать друг друга. |
| JList<E> | Компонент, отображающий список объектов и позволяющий пользователю выбрать один или несколько элементов. |
| JList.DropLocation | Подкласс TransferHandler.DropLocation, представляющий место сброса для JList. |
| JMenu | Реализация меню — всплывающего окна с элементами JMenuItems, которое отображается, когда пользователь выбирает элемент в JMenuBar. |
| JMenuBar | Реализация строки меню. |
| JMenuItem | Реализация элемента меню. |
| JOptionPane | JOptionPane упрощает отображение стандартного диалогового окна, запрашивающего у пользователей значение или сообщающего им какую-либо информацию. |
| JPanel | JPanel — универсальный легковесный контейнер. |
| JPasswordField | JPasswordField — легковесный компонент для редактирования одной строки текста, в котором отображается факт ввода, но не исходные символы. |
| JPopupMenu | Реализация всплывающего меню — небольшого окна со списком вариантов. |
| JPopupMenu.Separator | Разделитель, предназначенный для всплывающего меню. |
| JProgressBar | Компонент, наглядно отображающий ход выполнения задачи. |
| JRadioButton | Реализация переключателя — элемента, который можно установить или снять и который отображает своё состояние пользователю. |
| JRadioButtonMenuItem | Реализация элемента меню-переключателя. |
| JRootPane | Легковесный контейнер, используемый внутри компонентов JFrame, JDialog, JWindow, JApplet и JInternalFrame. |
| JScrollBar | Реализация полосы прокрутки. |
| JScrollPane | Предоставляет прокручиваемое представление легковесного компонента. |
| JSeparator | JSeparator — это универсальный компонент для создания разделительных линий. Чаще всего он используется для разделения элементов меню на логические группы. |
| JSlider | Компонент, позволяющий пользователю графически выбрать значение, перемещая ползунок в заданном интервале. |
| JSpinner | Однострочное поле ввода, позволяющее пользователю выбрать число или значение объекта из упорядоченной последовательности. |
| JSpinner.DateEditor | Редактор для JSpinner, модель которого является SpinnerDateModel. |
| JSpinner.DefaultEditor | Простой базовый класс для специализированных редакторов, отображающий доступное только для чтения представление текущего значения модели с помощью JFormattedTextField. |
| JSpinner.ListEditor | Редактор для JSpinner, модель которого является SpinnerListModel. |
| JSpinner.NumberEditor | Редактор для JSpinner, модель которого является SpinnerNumberModel. |
| JSplitPane | JSplitPane используется для разделения двух (и только двух) Components. |
| JTabbedPane | Компонент, позволяющий пользователю переключаться между группой компонентов, нажимая вкладку с заданным заголовком и/или значком. |
| JTable | JTable используется для отображения и редактирования обычных двумерных таблиц ячеек. |
| JTable.DropLocation | Подкласс TransferHandler.DropLocation, представляющий место сброса для JTable. |
| JTable.PrintMode | Режимы печати, используемые при печати JTables. |
| JTextArea | JTextArea — это многострочная область для отображения обычного текста. |
| JTextField | JTextField — легковесный компонент для редактирования одной строки текста. |
| JTextPane | Текстовый компонент, к которому можно применять графически отображаемые атрибуты разметки. |
| JToggleButton | Реализация двухпозиционной кнопки. |
| JToggleButton.ToggleButtonModel | Модель ToggleButton |
| JToolBar | JToolBar предоставляет компонент для отображения часто используемых Actions или элементов управления. |
| JToolBar.Separator | Разделитель, предназначенный для панели инструментов. |
| JToolTip | Используется для отображения подсказки для компонента. |
| JTree | Элемент управления, отображающий иерархический набор данных в виде структуры. |
| JTree.DropLocation | Подкласс TransferHandler.DropLocation, представляющий место сброса для JTree. |
| JTree.DynamicUtilTreeNode | DynamicUtilTreeNode может оборачивать векторы, хеш-таблицы, массивы и строки, а также при необходимости создавать соответствующие дочерние узлы дерева. |
| JTree.EmptySelectionModel | EmptySelectionModel — это TreeSelectionModel, не позволяющий ничего выбрать. |
| JViewport | «Область просмотра» или «иллюминатор», через который видна лежащая под ним информация. |
| JWindow | JWindow — это контейнер, который можно разместить в любом месте рабочего стола пользователя. |
| KeyStroke | KeyStroke представляет нажатие клавиши на клавиатуре или эквивалентном устройстве ввода. |
| LayoutFocusTraversalPolicy | SortingFocusTraversalPolicy, который сортирует компоненты по размеру, положению и ориентации. |
| LayoutStyle | LayoutStyle предоставляет информацию о размещении компонентов. |
| LayoutStyle.ComponentPlacement | ComponentPlacement — это перечисление возможных способов взаимного размещения двух компонентов. |
| ListCellRenderer<E> | Определяет компоненты, которые можно использовать как «штампы» для отрисовки ячеек JList. |
| ListModel<E> | Этот интерфейс определяет методы, с помощью которых такие компоненты, как JList, получают значение каждой ячейки списка и длину списка. |
| ListSelectionModel | Этот интерфейс представляет текущее состояние выбора для компонентов, отображающих список значений со стабильными индексами. |
| LookAndFeel | LookAndFeel, как следует из названия, инкапсулирует внешний вид и поведение. |
| MenuElement | Любой компонент, который можно поместить в меню, должен реализовывать этот интерфейс. |
| MenuSelectionManager | MenuSelectionManager управляет выбором в иерархии меню. |
| MutableComboBoxModel<E> | Изменяемая версия ComboBoxModel. |
| OverlayLayout | Менеджер компоновки для размещения компонентов поверх друг друга. |
| Painter<T> | Делегат для рисования. |
| Popup | Всплывающие окна используются для отображения пользователю Component, обычно поверх всех остальных Components в определённой иерархии контейнеров. |
| PopupFactory | PopupFactory, как следует из названия, используется для получения экземпляров Popups. |
| ProgressMonitor | Класс для отслеживания хода выполнения операции. |
| ProgressMonitorInputStream | Отслеживает ход чтения из InputStream. |
| Renderer | Определяет требования к объекту, отвечающему за визуализацию значения. |
| RepaintManager | Этот класс управляет запросами на перерисовку, позволяя свести их количество к минимуму, например объединяя несколько запросов в один для компонентов дерева. |
| RootPaneContainer | Этот интерфейс реализуется компонентами с единственным дочерним элементом JRootPane: JDialog, JFrame, JWindow, JApplet, JInternalFrame. |
|
RowFilter<M, |
RowFilter используется для фильтрации записей модели, чтобы они не отображались в представлении. |
| RowFilter.ComparisonType | Перечисление возможных значений сравнения, поддерживаемых некоторыми фильтрами RowFilter по умолчанию. |
|
RowFilter.Entry<M, |
Объект Entry передаётся экземплярам RowFilter, что позволяет фильтру получить значение данных записи и определить, следует ли её отображать. |
| RowSorter<M> | RowSorter служит основой для сортировки и фильтрации. |
| RowSorter.SortKey | SortKey описывает порядок сортировки для определённого столбца. |
| Scrollable | Интерфейс, предоставляющий информацию прокручиваемому контейнеру, например JScrollPane. |
| ScrollPaneConstants | Константы, используемые компонентом JScrollPane. |
| ScrollPaneLayout | Менеджер компоновки, используемый компонентом JScrollPane. |
| ScrollPaneLayout.UIResource | Версия ScrollPaneLayout, являющаяся ресурсом пользовательского интерфейса. |
| SingleSelectionModel | Модель, поддерживающая выбор не более одного элемента по индексу. |
| SizeRequirements | Для удобства менеджеров компоновки вычисляет информацию о размере и положении компонентов. |
| SizeSequence | Объект SizeSequence эффективно поддерживает упорядоченный список размеров и соответствующих позиций. |
| SortingFocusTraversalPolicy | Политика обхода фокуса, определяющая порядок обхода путем сортировки компонентов цикла обхода фокуса на основе заданного компаратора. |
| SortOrder | SortOrder — перечисление возможных порядков сортировки. |
| SpinnerDateModel | SpinnerModel для последовательностей Date. |
| SpinnerListModel | Простая реализация SpinnerModel, значения которой задаются массивом или List. |
| SpinnerModel | Модель потенциально неограниченной последовательности значений объектов. |
| SpinnerNumberModel | SpinnerModel для последовательностей чисел. |
| Spring | Экземпляр класса Spring содержит три свойства, характеризующие его поведение: значения минимальное, предпочтительное и максимальное. |
| SpringLayout | SpringLayout размещает дочерние элементы связанного с ним контейнера в соответствии с набором ограничений. |
| SpringLayout.Constraints | Объект Constraints содержит ограничения, определяющие, как изменяются размер и положение компонента в контейнере, управляемом SpringLayout. |
| SwingConstants | Набор констант, обычно используемых для позиционирования и ориентации компонентов на экране. |
| SwingContainer | Аннотация, используемая для указания некоторой информации, связанной со Swing, для автоматически сгенерированных классов BeanInfo. |
| SwingUtilities | Набор вспомогательных методов для Swing. |
|
SwingWorker<T, |
Абстрактный класс для выполнения длительных задач взаимодействия с графическим интерфейсом в фоновом потоке. |
| SwingWorker.StateValue | Значения связанного свойства state. |
| Timer | Генерирует одно или несколько событий ActionEvent с заданными интервалами. |
| ToolTipManager | Управляет всеми ToolTips в системе. |
| TransferHandler | Этот класс используется для обработки передачи Transferable в компоненты Swing и из них. |
| TransferHandler.DropLocation | Представляет место, куда следует вставить перетаскиваемые данные. |
| TransferHandler.TransferSupport | Этот класс инкапсулирует все важные сведения о передаче данных через буфер обмена или перетаскиванием, а также позволяет настраивать различные аспекты перетаскивания. |
| UIClientPropertyKey | Этот интерфейс используется только для маркировки ключей клиентских свойств для JComponent, задаваемых пользовательским интерфейсом, которые необходимо очистить при смене L&F и сериализации. |
| UIDefaults | Таблица значений по умолчанию для компонентов Swing. |
| UIDefaults.ActiveValue | Этот класс позволяет хранить в таблице значений по умолчанию запись, которая создается каждый раз при обращении к ней одним из методов getXXX(key). |
| UIDefaults.LazyInputMap | LazyInputMap создаст InputMap в своем методе createValue. |
| UIDefaults.LazyValue | Этот класс позволяет хранить в таблице значений по умолчанию запись, которая создается только при первом обращении к ней одним из методов getXXX(key). |
| UIDefaults.ProxyLazyValue | Этот класс предоставляет реализацию LazyValue, которую можно использовать для отложенной загрузки класса создаваемого экземпляра. |
| UIManager | UIManager управляет текущим оформлением, набором доступных вариантов оформления, PropertyChangeListeners, получающих уведомления об изменении оформления, значениями оформления по умолчанию и вспомогательными методами для получения различных значений по умолчанию. |
| UIManager.LookAndFeelInfo | Предоставляет краткую информацию об установленном LookAndFeel для настройки меню или первоначальной настройки приложения. |
| UnsupportedLookAndFeelException | Исключение, указывающее, что запрошенные классы управления оформлением отсутствуют в системе пользователя. |
| ViewportLayout | Менеджер компоновки по умолчанию для JViewport. |
| WindowConstants | Константы, используемые для управления операцией закрытия окна. |
© 1993, 2025, 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/25/docs/api/java.desktop/javax/swing/package-summary.html