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. C++运算符重载(友元函数方式)

    我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函 ...

  2. 10 Big Data Possibilities for 2017 Based on Oracle's Predictions

    2017 will see a host of informed predictions, lower costs, and even business-centric gains, courtesy ...

  3. 【TYVJ 五月图论专项有奖比赛】

    最短路+TSP+最小生成树+倍增LCA+TreeDP 第一题 其实是个TSP问题(然而我没发现),但是关键点很少,只有5个,所以用dij+heap分别预处理出来这五个点为源的最短路…… 然后枚举起点 ...

  4. 第十五章 springboot + pojo默认值设置

    我们有时需要给POJO设置默认值 pojo设置(推荐) 1.User package com.xxx.firstboot.domain; import lombok.Getter; import lo ...

  5. go语言基础之append函数的使用

    1.append函数的使用 作用:在原切片的末尾添加元素 示例: package main //必须有个main包 import "fmt" func main() { s1 := ...

  6. Merge Interval leetcode java

    题目: Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6] ...

  7. Projects Plan For Remaining 2013

    Projects Plan For Remaining 2013 - Lisp Project: To Be. - Python Project: To Be. - Perl Project: To ...

  8. Cognos两种建模工具对于复杂日期维度的处理比较(下)

    本文继Cognos两种建模工具对于复杂日期维度的处理比较(上)之后将介绍一下Cognos中建模工具Transform对复杂日期维度的处理. 二:Transform建模对于复杂日期维度的处理 为了书写效 ...

  9. Unity3d---> IEnumerator

    Unity3d---> IEnumerator 2013-04-18 10:24 2162人阅读 评论(0) 收藏 举报 Unity3dc# using UnityEngine; using S ...

  10. rapidxml 解析修改内存的值

    1.使用rapidxml解析的时候,也就是 调用xmlDoc.parse<0>(xmlContent),特别注意,rapidxml会修改内存的值,把右尖括号>修改为'\0',因此特别 ...