Package javax.swing
Swing's Threading Policy
一般来说,Swing不是线程安全的。 除非另有说明,否则必须在事件派发线程上访问所有Swing组件和相关类。 典型的Swing应用程序响应于从用户手势生成的事件进行处理。 例如,点击一个JButton
通知所有ActionListeners
添加到JButton
。 由于在事件调度线程上调度了从用户手势生成的所有事件,因此大多数开发人员不受限制的影响。
然而,影响在于构建和显示Swing应用程序。 调用应用程序的main
方法,或方法Applet
,没有事件调度线程上调用。 因此,在构造和显示应用程序或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
应在事件指派线程上修改TableModel
。
如果在单独的线程上修改模型,则存在异常和可能的显示损坏的风险。
虽然立即对UI进行更新通常是安全的,但在事件分派线程上执行时,有一个例外:如果模型侦听器在UI更新之前尝试进一步更改UI以反映挂起的更改,那么UI可能会渲染错误。 如果安装了应用程序的应用程序需要更新UI以响应将导致模型结构发生更改的事件,则会发生这种情况。 首先允许组件安装的侦听器处理此更改非常重要,因为无法保证可以调用侦听器的顺序。 解决方案是让应用程序侦听器使用SwingUtilities.invokeLater
更改,以便在处理组件安装的所有模型侦听器之后对UI呈现进行任何更改。
由于所有事件都在事件调度线程上传递,因此必须注意事件处理。 特别是,在事件调度线程上执行的长时间运行的任务(例如网络io或计算密集型处理)阻止事件调度线程调度任何其他事件。 当事件调度线程被阻止时,应用程序完全没有响应用户输入。 有关使用Swing时执行此类处理的首选方法,请参阅SwingWorker
。
有关该主题的更多信息,请参见Swing tutorial ,特别是Concurrency in Swing 。
Related Documentation
有关概述,教程,示例,指南和其他文档,请参阅:- The Swing Connection
- The Java Tutorial
- Online Training在Java Developer Connection SM上
- Java Foundation Classes (JFC)主页
-
接口摘要 接口 描述 Action Action
接口为Action
接口提供了有用的扩展,ActionListener
多个控件访问相同的功能。BoundedRangeModel 定义Slider
s和ProgressBar
s等组件使用的数据模型。ButtonModel 按钮的状态模型。CellEditor 此接口定义任何通用编辑器应该能够实现的方法。ComboBoxEditor 用于JComboBox组件的编辑器组件。ComboBoxModel<E> 组合框的数据模型。DesktopManager DesktopManager对象由JDesktopPane对象拥有。Icon 一种固定尺寸的小图片,通常用于装饰组件。JComboBox.KeySelectionManager 定义KeySelectionManager
的接口。ListCellRenderer<E> 标识可用作“橡皮图章”的组件,以在JList中绘制单元格。ListModel<E> 此接口定义方法组件,如JList用于获取列表中每个单元格的值以及列表的长度。ListSelectionModel 此接口表示显示具有稳定索引的值列表的任何组件的选择的当前状态。MenuElement 可以放入菜单的任何组件都应该实现此接口。MutableComboBoxModel<E> 可变版本ComboBoxModel
。Painter<T> 绘画代表。Renderer 定义负责“呈现”(显示)值的对象的要求。RootPaneContainer 此接口由具有单个JRootPane子组件的组件实现:JDialog,JFrame,JWindow,JApplet,JInternalFrame。Scrollable 一个接口,为JScrollPane之类的滚动容器提供信息。ScrollPaneConstants 与JScrollPane组件一起使用的常量。SingleSelectionModel 最多支持一个索引选择的模型。SpinnerModel 可能无界的对象值序列的模型。SwingConstants 常量集合,通常用于在屏幕上定位和定向组件。UIClientPropertyKey 此接口仅用于标记由UI设置的JComponent
客户端属性的密钥,需要在L&F更改和序列化时清除。UIDefaults.ActiveValue 此类允许用户在每次使用getXXX(key)
方法之一查找时构造的默认表中存储条目。UIDefaults.LazyValue 此类允许在默认表中存储一个条目,该条目在第一次使用getXXX(key)
方法之一进行查找之前不会构建。WindowConstants 用于控制窗口关闭操作的常量。 -
类摘要 类 描述 AbstractAction 此类提供JFCAction
接口的默认实现。AbstractButton 定义按钮和菜单项的常见行为。AbstractCellEditor 基类为CellEditors
,提供默认的实现在方法CellEditor
除了接口getCellEditorValue()
。AbstractListModel<E> 数据模型的抽象定义,提供List
及其内容。AbstractSpinnerModel 此类提供SpinnerModel接口的ChangeListener部分,该部分应适用于大多数具体的SpinnerModel实现。ActionMap ActionMap
提供从Object
s(称为 密钥或Action
名称 )到Action
s的映射。BorderFactory 自动售货标准Border
对象的工厂类。Box 一个轻量级容器,它使用BoxLayout对象作为其布局管理器。Box.Filler 轻量级组件的实现,它参与布局但没有视图。BoxLayout 布局管理器,允许垂直或水平布置多个组件。ButtonGroup 此类用于为一组按钮创建多重排除范围。CellRendererPane 此类插入单元格渲染器和使用它们的组件之间。ComponentInputMap 甲ComponentInputMap
是InputMap
与特定关联JComponent
。DebugGraphics 图形子类支持图形调试。DefaultBoundedRangeModel BoundedRangeModel的通用实现。DefaultButtonModel Button
组件的数据模型的默认实现。DefaultCellEditor 表和树单元格的默认编辑器。DefaultComboBoxModel<E> 组合框的默认模型。DefaultDesktopManager 这是DesktopManager
的实现。DefaultFocusManager 这个类已经被1.4焦点API淘汰了。DefaultListCellRenderer 呈现列表中的项目。DefaultListCellRenderer.UIResource 实现UIResource的DefaultListCellRenderer的子类。DefaultListModel<E> 此类松散地实现了java.util.Vector
API,因为它实现了java.util.Vector
版本的java.util.Vector
,没有集合类支持,并在发生更改时通知ListDataListener
。DefaultListSelectionModel 列表选择的默认数据模型。DefaultRowSorter<M,I> RowSorter
的实现,提供围绕基于网格的数据模型的排序和过滤。DefaultRowSorter.ModelWrapper<M,I> DefaultRowSorter.ModelWrapper
负责提供由DefaultRowSorter
排序的数据。DefaultSingleSelectionModel SingleSelectionModel的通用实现。FocusManager 这个类已经被1.4焦点API淘汰了。GrayFilter 图像过滤器,通过将图像转换为灰度图像来“禁用”图像,并使图像中的像素变亮。GroupLayout GroupLayout
是一个LayoutManager
,LayoutManager
组件进行分层组合,以便将它们放在Container
。ImageIcon Icon界面的一个实现,用于绘制图像中的图标。InputMap InputMap
提供输入事件(当前仅使用KeyStroke
s)和Object
。InputVerifier 此类为Swing组件提供验证机制。InternalFrameFocusTraversalPolicy FocusTraversalPolicy,可以选择提供用于确定JInternalFrame的初始Component的算法。JApplet Deprecated. The Applet API is deprecated, no replacement.JButton “推”按钮的实现。JCheckBox 复选框的实现 - 可以选择或取消选择的项目,并向用户显示其状态。JCheckBoxMenuItem 可以选择或取消选择的菜单项。JColorChooser JColorChooser
提供了一个控件窗格,旨在允许用户操作和选择颜色。JComboBox<E> 组合按钮或可编辑字段和下拉列表的组件。JComponent 除顶级容器外的所有Swing组件的基类。JDesktopPane 用于创建多文档界面或虚拟桌面的容器。JDialog 用于创建对话框窗口的主类。JEditorPane 用于编辑各种内容的文本组件。JFileChooser JFileChooser
为用户提供了一种选择文件的简单机制。JFormattedTextField JFormattedTextField
扩展JTextField
添加了对格式化任意值的支持,以及在用户编辑文本后检索特定对象。JFormattedTextField.AbstractFormatter 的实例AbstractFormatter
被用来通过JFormattedTextField
同时处理从对象到字符串的转换,并且从String的一个对象。JFormattedTextField.AbstractFormatterFactory 的实例AbstractFormatterFactory
被用来通过JFormattedTextField
获得的实例AbstractFormatter
其进而用来格式的值。JFrame 扩展版java.awt.Frame
,增加了对JFC / Swing组件体系结构的支持。JInternalFrame 一个轻量级对象,提供本机框架的许多功能,包括拖动,关闭,成为图标,调整大小,标题显示以及支持菜单栏。JInternalFrame.JDesktopIcon 此组件表示JInternalFrame
的图标化版本。JLabel 短文本字符串或图像的显示区域,或两者。JLayer<V extends Component> JLayer
是Swing组件的通用装饰器,它使您能够实现各种高级绘画效果,并接收在其边界内生成的所有AWTEvent
的通知。JLayeredPane JLayeredPane
为JFC / Swing容器添加深度,允许组件在需要时相互重叠。JList<E> 显示对象列表并允许用户选择一个或多个项目的组件。JList.DropLocation 的一个子类TransferHandler.DropLocation
表示用于一个放置位置JList
。JMenu 菜单的实现 - 包含JMenuItem
的弹出窗口,当用户选择JMenuBar
上的项目时显示该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
显示模型当前值的JFormattedTextField
。JSpinner.ListEditor JSpinner
的编辑,其型号为SpinnerListModel
。JSpinner.NumberEditor JSpinner
的编辑,其型号为SpinnerNumberModel
。JSplitPane JSplitPane
用于划分两个(仅两个)Component
s。JTabbedPane 一种组件,允许用户通过单击具有给定标题和/或图标的选项卡在一组组件之间切换。JTable JTable
用于显示和编辑常规的二维单元格表。JTable.DropLocation 的一个子类TransferHandler.DropLocation
表示用于一个放置位置JTable
。JTextArea JTextArea
是一个显示纯文本的多行区域。JTextField JTextField
是一个轻量级组件,允许编辑单行文本。JTextPane 一个文本组件,可以使用以图形方式表示的属性进行标记。JToggleButton 双状态按钮的实现。JToggleButton.ToggleButtonModel ToggleButton模型JToolBar JToolBar
提供了一个用于显示常用Action
或控件的组件。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
提供有关如何定位组件的信息。LookAndFeel LookAndFeel
,LookAndFeel
封装了外观。MenuSelectionManager MenuSelectionManager拥有菜单层次结构中的选择。OverlayLayout 布局管理器将组件排列在彼此的顶部。Popup 弹出窗口用于向用户显示Component
,通常位于特定包含层次结构中的所有其他Component
。PopupFactory PopupFactory
,顾名思义,用来获得的实例Popup
秒。ProgressMonitor 用于监视某些操作进度的类。ProgressMonitorInputStream 监视从某些InputStream读取的进度。RepaintManager 此类管理重绘请求,允许最小化重绘次数,例如通过将多个请求折叠为组件树成员的单个重绘。RowFilter<M,I> RowFilter
用于过滤掉模型中的条目,以便它们不会显示在视图中。RowFilter.Entry<M,I> 将Entry
对象传递给RowFilter
实例,允许过滤器获取条目数据的值,从而确定是否应显示该条目。RowSorter<M> RowSorter
提供了排序和过滤的基础。RowSorter.SortKey SortKey描述特定列的排序顺序。ScrollPaneLayout 布局管理器使用JScrollPane
。ScrollPaneLayout.UIResource UI资源版本为ScrollPaneLayout
。SizeRequirements 为方便布局管理器,计算有关组件大小和位置的信息。SizeSequence SizeSequence
对象有效地维护大小和相应位置的有序列表。SortingFocusTraversalPolicy FocusTraversalPolicy,它通过基于给定的比较器对焦点遍历循环的组件进行排序来确定遍历顺序。SpinnerDateModel SpinnerModel
,序列为Date
s。SpinnerListModel SpinnerModel
的简单实现,其值由数组或List
定义。SpinnerNumberModel SpinnerModel
用于数字序列。Spring Spring
类的实例包含三个表征其行为的属性: 最小值 , 首选值和 最大值 。SpringLayout ASpringLayout
根据一组约束SpringLayout
其关联容器的子项。SpringLayout.Constraints Constraints
对象包含约束,该约束控制组件的大小和位置在由SpringLayout
控制的容器中的SpringLayout
。SwingUtilities Swing实用程序方法的集合。SwingWorker<T,V> 一个抽象类,用于在后台线程中执行冗长的GUI交互任务。Timer ActionEvent
指定的时间间隔触发一个或多个ActionEvent
s。ToolTipManager 管理系统中的所有ToolTips
。TransferHandler 此类用于处理Transferable
与Swing组件之间的传输。TransferHandler.DropLocation 表示应插入已删除数据的位置。TransferHandler.TransferSupport 此类封装了剪贴板或拖放传输的所有相关详细信息,还允许自定义拖放体验的各个方面。UIDefaults Swing组件的默认表。UIDefaults.LazyInputMap LazyInputMap
将创建一个InputMap
在其createValue
方法。UIDefaults.ProxyLazyValue 此类提供LazyValue
的实现,可用于延迟为要创建的实例加载Class。UIManager UIManager
管理当前外观,可用外观集合,PropertyChangeListeners
,当外观发生变化时通知,外观和感觉默认,以及获取各种默认值的便捷方法。UIManager.LookAndFeelInfo 提供有关已安装的LookAndFeel
的一些信息,以便配置菜单或初始应用程序设置。ViewportLayout JViewport
的默认布局管理器。 -
枚举摘要 Enum 描述 DropMode 丢弃模式,用于确定组件在拖放过程中跟踪和指示放置位置的方法。GroupLayout.Alignment 枚举可能的方式ParallelGroup
可以调整其子项。JTable.PrintMode 打印模式,用于打印JTable
s。LayoutStyle.ComponentPlacement ComponentPlacement
是两个组件相对于彼此放置的可能方式的枚举。RowFilter.ComparisonType 枚举某些默认RowFilter
支持的可能比较值。SortOrder SortOrder是可能的排序顺序的枚举。SwingWorker.StateValue state
绑定属性的值。 -
异常摘要 异常 描述 UnsupportedLookAndFeelException 指示所请求的外观管理类的异常不存在于用户的系统上。 -
注解类型摘要 Annotation Type 描述 SwingContainer An annotation used to specify some swing-related information for the automatically generatedBeanInfo
classes.