文档章节

java swing 组件技术(上)

静心天涯
 静心天涯
发布于 2013/06/14 02:13
字数 1245
阅读 7268
收藏 22

    第一次写自己的博客,明知道写得很水,还是努力去写了,希望踏出第一步之后,能有着更好的发展。这几天看了一些资料,总结了一下自己所学的关于java swing的知识。

一、        java swing 组件技术简介

1.swing的特性

l  是AWT的扩展,swing比AWT提供了更多的组件和外观

l  它是纯java代码编写(除了JFrameJDialogJApplet),因此与平台无关

2.AWT的缺点

      组件少而且是本地代码实现(无法实现跨平台)

3.swing 和 AWT相比

      一个重要的的改进在于swing把一个组件的处理分为图形部分和数据处理部分(MVC模型)

l  图形部分由编程环境统一处理(View

l  数据部分由一个数据处理模型进行处理(Model

4.swing编程应注意的问题

l  swing和AWT组件不要混合使用,可能会导致不能正常显示的错误

l  正确理解轻量级组件与重量级组件的不同

轻量级组件——swing组件,由纯java代码实现,占用系统资源少

重量级组件——AWT组件,有本地c代码实现,占用系统资源多

(注:JFrameJDialogJApplet(顶层容器)是重量级组件)

 

二、        swing的“外观和感觉”(LookAndFeel

1.swing中常见的“LookAndFeel”

Metal风格 (默认)

 javax.swing.plaf.metal.MetalLookAndFeel

Windows风格

com.sun.java.swing.plaf.windows.WindowsLookAndFeel

Windows Classic风格

com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel

Motif风格

com.sun.java.swing.plaf.motif.MotifLookAndFeel

Mac风格 (需要在相关的操作系统上方可实现)

com.sun.java.swing.plaf.mac.MacLookAndFeel

GTK风格 (需要在相关的操作系统上方可实现)

com.sun.java.swing.plaf.gtk.GTKLookAndFeel

可跨平台的默认风格

UIManager.getCrossPlatformLookAndFeelClassName()

当前系统的风格

UIManager.getSystemLookAndFeelClassName()

意义:通过LookAndFeel机制,我们可以是程序的设计者任意转换程序的人机界面来对应不同的操作系统

      2.设置swingLookAndFeel

      在swing中,采用UIManager类来管理swing界面的LookAndFeelUIManager类提供静态方法setLookAndFeel()来设置界面的LookAndFeel,该方法是一个重载方法,提供两个重载方式:

      setLookAndFeel(LookAndFeel newLookAndFeel)

      setLookAndFeel( String className)

其中:参数newLookAndFeel表示组件的某种外观,className表示组件某种外观的名字

      2-1.设置方法(静态设置,动态设置)

静态设置——设计时指定LookAndFeel

eg1:

String lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";
UIManager.setLookAndFeel(lookAndFeel);

eg2:

String lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
UIManager.setLookAndFeel(lookAndFeel);

 

动态设置——运行时指定LookAndFeel

eg:

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

//运行时动态更新外观

SwingUtilities.updateComponentTreeUI(this)


附:SwingUtilities.updateComponentTreeUI(Component c)

    对组件c重新设置外观

注:由于JFrame、JDialogJApplet(顶层容器)为重量级组件,因此他们的外观只与操作系统平台有关系,在相同的操作系统平台下表现相同的外观

2-2.程序代码

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class LookAndFeelDemo2 extends JFrame {

	private JRadioButton radio1 = new JRadioButton("Metal");
	private JRadioButton radio2 = new JRadioButton("Windows");
	private JRadioButton radio3 = new JRadioButton("Motif");
	private JPanel panelNorth = new JPanel();
	private JPanel panelSouth = new JPanel();
	private JTextArea area = new JTextArea(6, 20);
	private JButton btn = new JButton("button");
	private JCheckBox chk = new JCheckBox("checkBox");
	private JComboBox cmbLookAndFeel = new JComboBox(new String[] { "Metal",
			"Widows", "Motif", "GTK" });

	public LookAndFeelDemo2(String title) {
		super(title);
		Container contentPane = this.getContentPane();
		ButtonGroup group = new ButtonGroup();
		group.add(radio1);
		group.add(radio2);
		group.add(radio3);

		panelNorth.add(radio1);
		panelNorth.add(radio2);
		panelNorth.add(radio3);

		panelSouth.add(btn);
		panelSouth.add(chk);
		panelSouth.add(cmbLookAndFeel);

		contentPane.add(panelNorth, BorderLayout.NORTH);
		contentPane.add(area, BorderLayout.CENTER);
		contentPane.add(panelSouth, BorderLayout.SOUTH);
		pack();

		setVisible(true);
		setSize(300, 400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 监听Item事件
		radio1.addItemListener(new MyItemListener());
		radio2.addItemListener(new MyItemListener());
		radio3.addItemListener(new MyItemListener());

	}

	private class MyItemListener implements ItemListener {

		public void itemStateChanged(ItemEvent e) {
			// 取得点击按钮的名字
			String itemName = ((JRadioButton) e.getSource()).getText();
			changeLookAndFeel(itemName);
		}
	}

	// 设置外观的private类型方法

	private void changeLookAndFeel(String name) {

		String lookAndFeel = "";
		if (name.equals("Metal")) {
			lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";

		} else if (name.equals("Windows")) {
			lookAndFeel = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
		} else if (name.equals("Motif")) {
			lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
		}else{
			//取得默认的metal外观
			lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";
		}

		try {
			UIManager.setLookAndFeel(lookAndFeel);
			// 运行时指定LookAndFeel,需要SwingUtilities.updateComponentTreeUI(Component
			// c)实现动态的更新
			SwingUtilities.updateComponentTreeUI(this);
			area.setText("当前外观类名:\n" + lookAndFeel);
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

	public static void main(String[] args) {
		new LookAndFeelDemo2("LookAndFeel");
	}
}

三、        swing组件

1.swing组件的分类

2.往swing容器里添加组件

      对于swing顶层容器(JFrameJDialogJApplet),在添加组件时,不能直接调用容器的add()方法。

      往顶层容器添加组件可用以下方法:

a)     通过getContentPane()方法获得当前容器的内容面板对象,在调用容器的add()方法加入各个组件

b)     先利用JPanel类生成一个内容面板对象panel,再将各个组件加入到panel中,然后调用的容器的setContentPane()方法,将panel加入到当前容器中

3.使用swing组件的基本规则

a)     把swing组件放入一个顶层容器中

b)     避免使用非swing的重量级组件

c)     往swing顶层容器添加组件时,不能直接调用add()方法

d)     内容面板缺省的布局策略是BorderLayout,不能对顶层容器进行布局

 

.swing的事件处理

a)     Swing组件可以产生AWT包中的事件

b)     有自己的事件包(javax.swing.event)

c)     Component类的五种事件

d)     能激活Container类的ContainerEvent事件的Swing组件

Swing组件中的容器(如:JFrame, JPane)

复合组件(如:JComboBox

© 著作权归作者所有

静心天涯
粉丝 12
博文 17
码字总数 20518
作品 0
广州
程序员
私信 提问
加载中

评论(6)

Sake
Sake
Swing感觉很清晰,所有的东西无非就是容器,组件或者容器+组件,FX感觉层次很麻烦,FX才开始看,有问题轻喷。
尤加辉
尤加辉
java swing??我觉得还不如搞搞安装卸载QQ,迅雷,好歹安装卸载以后可以修电脑用
vidy_tu
vidy_tu
最近在公司写一些小工具,用swing做个界面还是可以的。
静心天涯
静心天涯 博主

引用来自“长工”的评论

最好能配上程序片段,以及各种风格窗口的截图,文章才算完整。

多谢指点,小子会努力的
lunar_stud
lunar_stud
个人认为java swing还是在学校的时候会用到,在真正的企业中恐怕更多的会是web方面的应用
赵云30
赵云30
最好能配上程序片段,以及各种风格窗口的截图,文章才算完整。
Swing Inspector 1.2.1(beta2)发布

Swing Inspector 1.2.1(beta2) for windows Swing Inspector是一个Java Swing/AWT用户界面分析、调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从j...

曼灵格
2012/12/23
1K
5
细说Java GUI:AWT,SWT,Swing

历史 Internet上有许多围绕这一争论的故事。你可能已经听说过它们中的大多数了,其中之一有助于让你理清头绪,让我们就从这里开始,Amy Fowler是Swing阵营的一个倡导者。 回到上个世纪90年代...

javasql
2014/02/05
0
2
Swing Inspector 1.2.2_beta1发布,完全免费开放,支持IBM JVM 1.6和1.7

功能改进: 1. 软件配置自动保存和加载(透明度、窗口位置大小、声音等) 2. 完全兼容IBM jvm 1.6和1.7 3. 窗口透明度实现层采用Windows API 4. 取消注册过程,完全开放。 详情:http://www....

曼灵格
2013/01/15
1K
6
基于 OSGi 的 Swing 客户端开发实践

简介: 随着 OSGi 技术迅猛发展,插件化开发技术得到了更为广泛的关注,同时也涌现出了 Equinox、Felix 等众多基于 OSGi 规范的开源框架。但目前相关技术文章主要关注的是 OSGi 同 JavaEE 技...

IBMdW
2011/11/18
1K
4
Swing Inspector 1.2.1 for windows 发布

Swing Inspector 1.2.1 for windows Swing Inspector是一个Java Swing/AWT用户界面分析、调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swin...

曼灵格
2012/12/25
386
1

没有更多内容

加载失败,请刷新页面

加载更多

solr实例

需求:使用Solr实现电商网站中商品信息搜索功能,可以根据关键字、分类、价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能。 一.架构设计:1.solr服务器 2.自己开发的应用(2.1...

klmkom
41分钟前
0
0
在知乎上看到一个关于Python资源的很不错的主题,可惜点赞不过400多

看上去,混知乎的技术相关的人还是少。 哪些 Python 库让你相见恨晚? Lingfeng Ai,伯乐在线技术翻译组,欢迎喜欢互联网和英… bulan1989、五德 等人赞同 Awesome Python中文版来啦! 本文由...

dillonxiao
47分钟前
3
0
(二)Django编写数据模型类

设计数据库和表结构是做网站的基础。在Django中,不需要通过SQL语句直接跟数据库打交道,而是完全用Python的类来创建数据模型,之后交给Django完成创建数据库的操作。 数据模型类 数据模型类...

ZeroBit
50分钟前
3
0
关于TensorFlow 2.0,这里有你想知道的一切

全文共8094字,预计学习时长30分钟或更长 图片来源:pexels.com/@pixabay TensorFlow是谷歌2015年开源的通用高性能计算库。最初主要是为构建神经网络(NNs)提供高性能的API。然而,随着时间的...

读芯术
55分钟前
5
0
Wondershare Recoverit - 专业数据恢复神器,支持U盘、存储卡等外部设备!

Wondershare Recoverit 今天带来的这款软件叫做Wondershare Recoverit,是一款专业实用的数据恢复软件,也是一款比较久的数据恢复软件了,可以恢复所有文件类型。 包括照片、视频、文档和其他...

_Somuns
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部