Swing01-概述
1.Swing概述
Swing百分之百由Java本身实现,是一套轻量级组件(完全由Java实现的组件叫做轻量级套件,依赖于本地平台的套件称之为重量级套件)。Swing不再依赖于平台的GUI,因此真正做到了平台外观的一致性。
但也因为Swing不再依赖平台,所以它的速度比AWT要慢。
2.Swing的优势
1.Swing使用MVC(Module-View-Controller,即模型-视图-控制器)设计模式。
模型(Module):用于维护组件的各种状态;
视图(View):是组件可视化的表现;
控制器(Controller):用于控制对各种事件、组件做出响应。
当模型发生改变时,它会通知所有依赖它的视图,视图会根据模型数据来更新自己。Swing使用UI代理来包装视图和控制器,还有一个模型对象来维护该组件的状态。例如,按钮JButton有一个维护其状态信息的模型ButtonModel对象。Swing组件的模型是自动设置的,因此可以直接使用JButton而无需关心ButtonModule。
2.Swing在各平台显示一致。
3.Swing可以使用外观插件。
3.Swing组件层次
对应关系
1.Swing中大部分直接或者间接继承自Java.awt.Container,因此既可以作为组件也可以作为容器。
2.Swing中大部分组件都是直接在awt组件名前加一个J,但也有几个需要注意的:
-JComboBox:对应awt中的Choice,但是功能更强。
-JFileChooser:对应awt中的FileDialog
-JScrollBar:对应awt中的Scrollbar
-JCheckBox:对应awt中的Checkbox
-JCheckBoxMenuItem:对应awt中的CheckboxMenuItem
功能层次
1.顶层容器:JFrame、JWindow、JDialog、JApplet
2.中间容器:JPanel、JScrollPane、JSplitPane、JToolBar等。
3.特殊容器:在用户界面上具有特殊作用的中间容器,如JIntemalFrame、JRootPane、JLayeredPane、JDesktopPane等。
4.基本组件:实现人机交互的组件,如JButton、JComboBox、JList、JMenu等。
5.不可编辑信息的显示组件:向用户显示不可编辑信息的组件,如JLabel、JProgressBar、JToolTip等。
6.可编辑信息的显示组件:向用户显示能被编辑的格式化信息的组件,如JTable、JTextArea、JTextField等。
7.特殊对话框组件:可以直接显示特殊对话框的组件,如JColorChooser和JFileChooser等。
4.AWT组件的Swing实现
Swing为除Canvas之外的所有AWT组件都提供了实现,Swing组件比AWT组件功能更加强大,相对于AWT组件,Swing组件有4个额外功能。
1.可以为Swing组件设置提示信息,使用setToolTipText()方法,为组件设置对用户有帮助的提示信息。
2.很多Swing组件,如按钮、标签、菜单项等,除了可以使用文字,还可以使用图标。为了允许使用图标,Swing为Icon接口提供了一个实现类ImageIcon,该实现类代表一个图像图标。
3.支持插拔式的外观风格。每一个JComponent对象都有一个ComponentUI对象,为它完成所有绘画、事件处理、决定尺寸大小等工作。ComponentUI对象依赖于当前使用的PLAF,使用UIManager.setLookAndFeel()方法可以改变外观风格。
4.支持设置边框。Swing组件可以设置一个或者多个边框,Swing提供了各种边框,用户也可以组合边框来自己设计边框。一种空白边框用于增大组件,同时协助布局管理器对容器内的组件进行合理布局。
每一个Swing组件都有一个对应的UI类,如JButton有ButtonUI类来作为UI代理。每一个组件的UI类都是将组件的J去掉然后加UI后缀。UI代理通常是个抽象基类,不同的PLAF会有不同的UI代理实现类,Swing类库包含了几套UI代理分别放在了不同的包下,每套UI代理都几乎实现了所有组件的ComponentUI实现,每套这样的实现都被称为一种PLAF实现。
1 import javax.swing.*;
2 import java.awt.event.ActionEvent;
3 import java.awt.event.ActionListener;
4 import java.awt.event.WindowAdapter;
5 import java.awt.event.WindowEvent;
6 import java.io.IOException;
7
8 public class SwingTestDemo1 {
9 //创建窗口
10 JFrame frame = new JFrame("Swing窗口程序");
11
12 //创建菜单栏
13 JMenuBar menubar = new JMenuBar();
14 JMenu fileMenu = new JMenu("文件");
15
16 JMenu editMenu = new JMenu("编辑");
17 JMenuItem auto = new JMenuItem("自动换行");
18 JMenuItem copy = new JMenuItem("复制");
19 JMenuItem paste = new JMenuItem("粘贴");
20
21 JMenu formatMenu = new JMenu("格式");
22 JMenuItem comment = new JMenuItem("注释");
23 JMenuItem uncomment = new JMenuItem("取消注释");
24
25 //创建文本域
26 JTextArea jta = new JTextArea(8,20);
27
28 //太丑了,我选择不要,留空
29 //创建颜色列表框
30 JList<String> colorList = new JList();
31
32 //创建选择相关组件
33 JComboBox<String> colorSelect = new JComboBox<>();
34
35 ButtonGroup sexGroup = new ButtonGroup();
36 JRadioButton male = new JRadioButton("男",true);
37 JRadioButton female = new JRadioButton("女",false);
38
39 JCheckBox isMarried = new JCheckBox("是否已婚?", false);
40
41 //创建底部
42 JTextField textField = new JTextField(20);
43 JButton submit = new JButton("Submit");
44
45 //创建右键菜单
46 JPopupMenu popMenu = new JPopupMenu();
47
48 ButtonGroup PopButtonGroup = new ButtonGroup();
49 JRadioButtonMenuItem metal = new JRadioButtonMenuItem("metal风格");
50 JRadioButtonMenuItem nimbus = new JRadioButtonMenuItem("nimbus风格");
51 JRadioButtonMenuItem windows = new JRadioButtonMenuItem("windows风格");
52 JRadioButtonMenuItem windowsClassic = new JRadioButtonMenuItem("windows经典风格");
53 JRadioButtonMenuItem motif = new JRadioButtonMenuItem("motif风格");
54
55 public void init(){
56 //组装底部
57 JPanel ButtonPanel = new JPanel();
58 ButtonPanel.add(textField);
59 ButtonPanel.add(submit);
60
61 //组合中部下部
62 Box CDown = Box.createVerticalBox();
63
64 JPanel centerPanel = new JPanel();
65
66 //创建颜色选项
67 centerPanel.add(colorSelect);
68 colorSelect.addItem("红色");
69 colorSelect.addItem("绿色");
70 colorSelect.addItem("蓝色");
71
72
73 sexGroup.add(male);
74 sexGroup.add(female);
75 centerPanel.add(male);
76 centerPanel.add(female);
77 centerPanel.add(isMarried);
78
79 CDown.add(centerPanel);
80 CDown.add(ButtonPanel);
81
82 //组合上部左右
83 Box Top = Box.createHorizontalBox();
84 Top.add(jta);
85 Top.add(colorList);
86
87 //组合菜单栏
88 //组合格式化菜单
89 formatMenu.add(comment);
90 formatMenu.add(uncomment);
91
92 //组合编辑菜单
93 editMenu.add(auto);
94 editMenu.addSeparator();
95 editMenu.add(copy);
96 editMenu.add(paste);
97 editMenu.addSeparator();
98 editMenu.add(formatMenu);
99
100 //组合菜单栏
101 menubar.add(fileMenu);
102 menubar.add(editMenu);
103
104 //组合右键菜单
105 PopButtonGroup.add(metal);
106 PopButtonGroup.add(nimbus);
107 PopButtonGroup.add(windows);
108 PopButtonGroup.add(windowsClassic);
109 PopButtonGroup.add(motif);
110
111 popMenu.add(metal);
112 popMenu.add(nimbus);
113 popMenu.add(windows);
114 popMenu.add(windowsClassic);
115 popMenu.add(motif);
116
117
118
119 //添加到窗口
120 frame.add(popMenu);
121 //组合整个界面
122 Box mainBox = Box.createVerticalBox();
123 mainBox.add(Top);
124 mainBox.add(CDown);
125 frame.add(mainBox);
126 frame.setJMenuBar(menubar);
127
128 //设置最佳大小
129 frame.pack();
130 //设置可见
131 frame.setVisible(true);
132
133 //设置右键监听
134 ActionListener RightMouse = new ActionListener() {
135 @Override
136 public void actionPerformed(ActionEvent e) {
137 String command = e.getActionCommand();
138 try {
139 changePLAF(command);
140 } catch (IOException ioException) {
141 ioException.printStackTrace();
142 } catch (ClassNotFoundException classNotFoundException) {
143 classNotFoundException.printStackTrace();
144 } catch (UnsupportedLookAndFeelException unsupportedLookAndFeelException) {
145 unsupportedLookAndFeelException.printStackTrace();
146 } catch (InstantiationException instantiationException) {
147 instantiationException.printStackTrace();
148 } catch (IllegalAccessException illegalAccessException) {
149 illegalAccessException.printStackTrace();
150 }
151 }
152 };
153
154 //注册右键监听器
155 metal.addActionListener(RightMouse);
156 nimbus.addActionListener(RightMouse);
157 windows.addActionListener(RightMouse);
158 windowsClassic.addActionListener(RightMouse);
159 motif.addActionListener(RightMouse);
160
161 //设置鼠标事件
162 mainBox.setComponentPopupMenu(popMenu);
163
164 //添加关闭功能
165 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
166 }
167
168 //添加改变外观的方法
169 private void changePLAF(String Command) throws IOException, ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException {
170 switch (Command){
171 case "metal风格":
172 UIManager.setLookAndFeel("javax.swing.plaf.MetalLookAndFeel");
173 break;
174 case "nimbus风格":
175 UIManager.setLookAndFeel("javax.swing.plaf.NimbusLookAndFeel");
176 break;
177 case "windows风格":
178 UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
179 break;
180 case "windows经典风格":
181 UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
182 break;
183 case "notif风格":
184 UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
185 break;
186 }
187
188 SwingUtilities.updateComponentTreeUI(frame.getContentPane());
189 SwingUtilities.updateComponentTreeUI(menubar);
190 SwingUtilities.updateComponentTreeUI(popMenu);
191 }
192 public static void main(String[] args) {
193 new SwingTestDemo1().init();
194 }
195 }
Swing01-概述的更多相关文章
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- .Net 大型分布式基础服务架构横向演变概述
一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- Java消息队列--JMS概述
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
- [AlwaysOn Availability Groups]健康模型 Part 1——概述
健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...
- μCos-ii学习笔记1_概述
一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
随机推荐
- unity 顶点弹性网格效果
1.球衰减 首先,我们将处理球衰减,鼠标或手指点中网格的点是碰撞点,越往外它所受的影响越小.我们需要从CPU中获取"_ImpactPos"这个碰撞点,获取摄像机和碰撞点的矢量,我们 ...
- Mysql预处理语句prepare、execute、deallocate
前言 做CTF题的时候遇到的所以参考资料学习一波.... MySQL的SQL预处理(Prepared) 一.SQL 语句的执行处理 1.即时 SQL 一条 SQL 在 DB 接收到最终执行完毕返回,大 ...
- mysql学习笔记1(mysql的基本架构)
mysql基本架构图 如图所示: 1 . MySQL 可以分为 Server 层和存储引擎层两部分 Server 层包括连接器.查询缓存.分析器.优化器.执行器等,涵盖 MySQL 的大多数核心服务功 ...
- tp5 删除图片以及文件
控制器调用 /** * [delimg 删除单张图片] * @return [type] [description] */ public function delimg(){ if (request( ...
- c# 调用Go 动态库
[StructLayout(LayoutKind.Sequential)] public struct GoMem { public IntPtr data; public UInt64 len; p ...
- ABBYY FineReader 15 查看和编辑PDF
使用ABBYY FineReader 15(Windows系统)OCR文字识别软件,用户可轻松查看和编辑各种类型的PDF数字文档,并可在文档中添加注释.添加与删除文字.格式化文字.搜索内容.保护PDF ...
- 下载器Folx扩展程序支持哪些浏览器
Folx使用多线程的下载方式大大提升了下载的速度,可以完全替代浏览器自带的下载工具,使下载文件的管理更加简单高效.但是,必须给浏览器安装Folx扩展程序,才能使用Folx下载页面链接. Folx在偏好 ...
- 下载器Folx如何实现排队下载功能
用户在下载多个文件时,当然会希望这些文件都能同时下载,以达到短时间内完成下载任务的目的.但另一方面来说,同时下载过多文件,会分散带宽资源,降低了每个文件的下载速度,从而导致下载时间的延长. 为了实现多 ...
- 如何用EasyRecovery恢复U盘乱码的文件
大多数用户在遇到U盘文件乱码的情况时,都显得有点手足无措,甚至会删除乱码文件,这样就导致了乱码文件数据的丢失.针对这种情况,我们应该怎么正确处理呢? 图1:U盘乱码 U盘文件乱码原因: 想要解决问题, ...
- Cypress系列(101)- intercept() 命令详解
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 使用该命令在网络层管理 HTTP ...