文档章节

java swing 组件技术(上)

静心天涯
 静心天涯
发布于 2013/06/14 02:13
字数 1245
阅读 7257
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

【redis】spring boot利用redis的Keyspace Notifications实现消息通知

前言 需求:当redis中的某个key失效的时候,更新key对应数据在数据库的状态 1、修改redis.conf 安装的redis服务默认是: notify-keyspace-events "",修改成 notify-keyspace-events Ex; 位置...

时刻在奔跑
21分钟前
2
0
IT基础设施中的人工智能可以改变工作的方式

  如今,减少人工智能的宣传和炒作已成为IT领导者的主要工作。提供有关人工智能在何处以及如何将其添加到IT基础设施的深入指南将会提供帮助。   很多技术提供商正在投入巨资,将人工智能...

琴殇的
21分钟前
1
0
vue cli3创建测试打包环境(通过development、production、alpha指定不同的接口地址)

参考地址 前言:项目一般有开发环境,测试环境,生产环境;vue cli内置有开发和生产环境,可以用process.env.NODE_ENV区分,有时候我们和后台同事需要本地连接调试代码,又需要连接测试环境调...

hkaikai
27分钟前
3
0
360安全浏览器龙芯、飞腾、兆芯版

主页https://browser.360.cn/se/linux/ 龙芯 http://down.360safe.com/gc/browser360-cn-stable-10.0.2001.0-1.mips64el.rpm http://down.360safe.com/gc/browser360-cn-stable_10.0.2001.0......

gugudu
27分钟前
45
0
访问JSP时,浏览器显示为

问题: <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param>......

器石_
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部