Swing是一个为Java设计的GUI工具包。Swing是Java基础类的一部分。Swing包括了图形用户界面(GUI)组件如:文本框,文本域,按钮,分隔窗格和表。

Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用Java支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

Hello World程序

Swing程序

HelloWorldSwing.java

import javax.swing.*;
public class HelloWorldSwing {
/**
* 创建并显示GUI。出于线程安全的考虑,
* 这个方法在事件调用线程中调用。
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true); //Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label); //Display the window.
frame.pack();
frame.setVisible(true);
} public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}

历史

互联网基础类(IFC)是网景公司最初为Java开发的图形库,第一次发布于1996年12月16日。

在1997年4月2日,太阳公司和网景公司宣称他们要将IFC和其他技术合并形成Java基础类。作为IFC最初提供组件的附加品,Swing引进了一个机制:在不改变大量的程序代码前提下允许程序中每个组件面板的变化。支持可更换面板技术的引入允许Swing组件在模拟原生组件外观的同时又保持了平台独立的优点。

架构

Swing是一个基于Java的跨平台MVC框架。使用单线程模式。此框架还在代码结构层和图形渲染层之间插入了一个抽象层。

可扩展性

Swing使用了高度模块化的架构,可以通过接口的方式使用各种定制框架来扩展Swing。用户可以通过Java的继承机制重写原始的组件来实现自己的代码。[1]

Swing是一个基于组件的框架,所有的组件都是从javax.swing.JComponent类继承来的。Swing对象通过异步方式发送事件,具有边界属性,并且会响应该组件的一系列方法。Swing组件是Java Beans组件,和Java Beans组件架构完全保持一致。

可定制性

Swing提供了可编程渲染模型,使用户可以对渲染细节进行控制。一般来看,Swing组件的视觉效果是一些通用元素的组合,比如外框、边距、窗口装饰等等。典型的情况是,用户通过编写代码,指定边框、颜色、背景、透明度等属性来定制一种通用Swing组件(如JTable)。核心组件则会用这些定制的属性来进行绘制。此外,也完全可以制作出非常特殊的GUI控件或是高度自定义的视觉效果。

  • Swing个性化绘制1

  • Swing个性化绘制2

  • Swing个性化绘制3

    可配置性

    Swing高度基于运行时的机制以及其间接的组合模式使得它可以在运行时响应对其底层设置的改变。例如,一个Swing的应用程序能在运行时动态地改变界面。此外,用户还能随时应用他们自己的Look And Feel。Look And Feel能够统一地改变当前程序的组件外观,而不用修改任何代码。

    同AWT的关系

    Java的早期版本以来,抽象视窗工具包为用户界面组件提供了平台独立的API。在AWT中,每个组件都由一个本地的等同组件生成和控制,这个原生组件是由当前的图形视窗系统决定的。

    与此相对,Swing组件经常被描述为轻量级的,因为它们不需要操作系统本身所带视窗工具包的原生资源来生成。

    Swing API的大部分是AWT的补充扩展而不是直接的代替。Swing用来绘制轻量级组件的核心渲染功能是由Java2D提供的,这是AWT的一部分。然而,轻量级和重量级组件在同一个应用中使用会导致Z-order不兼容。

    同SWT的关系

    标准器件工具包 (SWT)是一个最初由IBM开发的工具包,现在由Eclipse基金会维护。SWT的实现同重量级的组件AWT有更多的共同之处。这样的好处是运行开销同所在平台的原生视窗工具包更为接近。

    SWT的到来使得Java桌面的开发者们分离为SWT的支持者和Swing的支持者。在6.0版Java中,Swing的新修补专注于同原生视窗平台的逼真度,这可能会直接解决这个问题。

Swing(Java)--维基百科的更多相关文章

  1. 使用JWPL (Java Wikipedia Library)操作维基百科数据

    使用JWPL (Java Wikipedia Library)操作维基百科数据 1. JWPL介绍 JWPL(Java Wikipedia Library)是一个开源的访问wikipeida数据的Ja ...

  2. JWPL工具处理维基百科wikipedia数据用于NLP

    JWPL处理维基百科数据用于NLP 处理zhwiki JWPL是一个Wikipedia处理工具,主要功能是将Wikipedia dump的文件经过处理.优化导入mysql数据库,用于NLP过程.以下以 ...

  3. 深度学习之NLP维基百科数据模型

    知识点 """ 1) from gensim.model import Word2Vec import jieba 2) opencc :将繁体字转换为简体字 转换命令: ...

  4. 中文维基百科分类提取(jwpl)--构建知识图谱数据获取

    首先感谢 : 1.https://blog.csdn.net/qq_39023569/article/details/88556301 2.https://www.cnblogs.com/Cheris ...

  5. 通过维基API实现维基百科查询功能

    通过英文维基的免费API,可以实现对维基百科的搜索查询或者标题全文查询等,尝试了一下通过title实现全文查询,返回的结果是wikitext格式,暂时不知道该如何应用,所以仅实现了查询功能,可以返回最 ...

  6. 中英文维基百科语料上的Word2Vec实验

    最近试了一下Word2Vec, GloVe 以及对应的python版本 gensim word2vec 和 python-glove,就有心在一个更大规模的语料上测试一下,自然而然维基百科的语料进入了 ...

  7. 开源共享一个训练好的中文词向量(语料是维基百科的内容,大概1G多一点)

    使用gensim的word2vec训练了一个词向量. 语料是1G多的维基百科,感觉词向量的质量还不错,共享出来,希望对大家有用. 下载地址是: http://pan.baidu.com/s/1boPm ...

  8. 学习笔记TF018:词向量、维基百科语料库训练词向量模型

    词向量嵌入需要高效率处理大规模文本语料库.word2vec.简单方式,词送入独热编码(one-hot encoding)学习系统,长度为词汇表长度的向量,词语对应位置元素为1,其余元素为0.向量维数很 ...

  9. wikipedia 维基百科 语料 获取 与 提取 处理 by python3.5

    英文维基百科 https://dumps.wikimedia.org/enwiki/ 中文维基百科 https://dumps.wikimedia.org/zhwiki/ 全部语言的列表 https: ...

随机推荐

  1. 借助 Resharper 和 StyleCop 让代码更整洁

    一:工具安装 Resharper 和 StyleCop 必须安装. Resharper 的配置文件如下:Resharper.zip 请按如下步骤导入, 1: 2: 3:   StyleCope 的配置 ...

  2. 定义和使用EL函数

    EL为表达式语言,在EL中,允许定义和使用函数.下面将介绍如何定义和使用EL的函数. 1. 定义和使用函数 函数的定义和使用分为以下3个步骤: (1)编写一个Java类,并在该类中编写公用的静态方法, ...

  3. 在JSP中应用JavaBean

    1. 解决中文乱码的JavaBean 在JSP页面中,处理中文字符经常会出现字符乱码的现象,特别是通过表单传递中文数据时容易产生.它的解决办法有很多,如将request的字符集指定为中文字符集,编写J ...

  4. Python源码学习七 .py文件的解释

    Python源码太复杂了... 今天看了下对.py文件的parse, 云里雾里的 py文件是最简单的, 在python的交互式窗口 import这个模块 a = 10 print(a) 开始分析,堆栈 ...

  5. Linq编程小趣味爱因斯坦谜题

    最近看到一个比较老的题目,题目----在一条街上,有5座房子,喷了5种颜色,每个房里住着不同国籍的人,每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物,问题---谁养鱼? 以前没事还做过这个题,现在 ...

  6. 使用Kindeditor上传图片

    给客户制作的项目中需要添加富文本,从网上看了一下很多人推荐kindeditor这个编辑器,用了之后也感觉不错,有一些问题的就是上传图片的时候遇到了一些问题,在这里记录一下,也方便以后查看. 首先在官网 ...

  7. 【Linux】Linux中 “there are stopped jobs”问题的解决方案

    在用管理员执行一个命令后,我用Ctrl+Z把命令转移到了后台天.导致我无法退出root的. 输入命令:logout终端显示:There are stopped jobs. 解决方法:输入命令:jobs ...

  8. 主成分分析(PCA)

    相对与网上很多人分享的有关PCA的经历,我第一次接触PCA却不是从人脸表情识别开始的,但我所在的实验室方向之一是人脸的研究,最后也会回到这个方向上来吧. PCA(principal component ...

  9. 如何做windows server 2008 R2 的磁盘清理

    参考如下的链接: https://technet.microsoft.com/en-us/library/ff630161(v=ws.10).aspx 运行后可能没有啥反应,磁盘空间也没增大.那是因为 ...

  10. PyQt5教程——事件和信号(5)

    PyQt5中的事件和信号 在这部分PyQt5编程教程中,我们探索应用中事件和信号的发生. 事件 所有的GUI应用都是事件驱动的.事件主要由应用的用户操作产生的.但是事件可能由其他条件触发,比如:一个网 ...