提供一组“轻量级”(全Java语言)组件,这些组件在所有平台上尽可能地工作。

有关使用这些组件的程序员指南,请参阅“Java教程”中的 Creating a GUI with JFC/Swing 。

一般来说,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 。

有关概述,教程,示例,指南和其他文档,请参阅:

java swing jdk_javax.swing相关推荐

  1. Java案例:Swing常用组件演示

    文章目录 一.Swing (一)Swing概述 (二)Swing与AWT的关系 (三)Swing组件继承关系图 二.Swing常用组件演示 (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建J ...

  2. 基于java+mysql的Swing+MySQL图书管理系统(java+swing+gui+mysql)

    基于java+mysql的Swing+MySQL图书管理系统(java+swing+gui+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclip ...

  3. JAVA图形编程Swing之——JPanel绘图

    JAVA图形编程Swing之--JPanel绘图     一直搞不清怎么在JPanel中绘2D图像,主要是不知怎样得到Graphics类的对像来画图,今天查了查资料,测试N种方法,终于搞明白.下面做一 ...

  4. java基础学习——Swing图形化用户界面编程

    GUI概述 早期计算机系统中,电脑向用户提供的是单调.枯燥.纯字符状态的"命令行界面(CLI)".就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看 ...

  5. Java中的Swing概述

    一.Swing特点 每个平台的GUI组件的显示会有所不同,但是在不同平台上运行使用Swing开发的应用程序时,就可以统一GUI组件的显示风格,因为Swing组件允许编程人员在跨平台时指定统一的外观和风 ...

  6. Java 中的 Swing 框架现在是不是被淘汰了?

    关于java中的Swing框架,我先说下如下的观点. 1 只要是用java开发的商业项目,就指着来挣钱的项目,都不会用Swing框架. 2 所以对java初学者来说,根本没必要学swing,甚至连类似 ...

  7. 基于java+mysql的Swing+MySQL火车票售票管理系统

    基于java+mysql的Swing+MySQL火车票售票管理系统 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程 ...

  8. 基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档)

    基于java+mysql的Swing+MySQL物业收费系统(java+gui+文档) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可 ...

  9. java桌面宠物swing实现

    java桌面宠物swing实现 在bilibili上看到一个少前小人的桌面程序 但他是Python写的. 于是就打算自己写一个java的 csdn上也有不少的桌面宠物程序,也给我提供了很好的参考 利用 ...

最新文章

  1. 一点小兴趣,一份小生意
  2. JavaScript教程之事件处理
  3. Oracle体系结构四(学习笔记)
  4. bzoj3275 Number
  5. Spark分组取TopN
  6. echart的x轴换行
  7. system什么意思c语言,system是什么意思?
  8. 2023年东南大学机械工程考研上岸经验
  9. 灵格斯词典(电脑端)+欧陆词典(手机端)
  10. 新战投入场,苏宁易购迎来破局发展新开端
  11. IOS微信分享调起微信后立刻返回到app中无法分享的问题
  12. web前端入门到实战:简单的图片轮播
  13. 百度搜索结果页面的参数_反馈搜索结果用时(rsv_sug4)
  14. 乐优商城之后台管理系统的环境搭建(七)
  15. 画动漫人物眼睛怎么上色
  16. SCAU 1037 计算数列和
  17. R语言ggplot2可视化:patchwork包将一个ggplot2可视化结果和一个plot函数可视化结果横向组合起来形成最终结果图、两个可视化的组合结果对齐、并为组合图像的每个子图添加标题
  18. 《肥鸟笔记--基础数据结构》一、栈
  19. 傻瓜攻略(九)——MATLAB实现简单的多元线性回归(以炼钢转炉炉龄问题为例)
  20. CMD / UNIX 命令

热门文章

  1. mysql数据库主主_MySQL主主复制(图文详解)
  2. 【Elasticsearch】 Elasticsearch Suggester 自动纠错 详解
  3. 60-200-040-使用-命令-MySQL查看引擎的命令
  4. 【lucene】lucene 高级搜索
  5. Spring : Spring配置文件加载位置
  6. 批量删除Windows7中隧道适配器的方法
  7. Spring :读取配置文件(.properties、.yam)相关注解
  8. TaskAttempt killed because it ran on unusable node IP:8041 Container released on a *lost* node
  9. LoadDruidSegmentStep failed File does not exist: /druid/segments
  10. cdh集群的重启过程