swing的第一课
Swing介绍
Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用。它是建立在AWT API之上,并作为 AWT API 的更换,因为它几乎每一个控制对应 AWT控制。 Swing 组件遵循模型 - 视图 - 控制器架构,以满足以下标准。
-
一个单一的 API 是足够支持多种外观和风格。
-
API 模拟驱动,使最高级别的API不要求有数据。
-
API 使用Java Bean的模式,使生成工具和IDE可以提供更好的服务给开发者使用它。
MVC架构
Swing API架构如下松散的,基于MVC架构,以下列方式支付。
-
模型表示组件的数据。
-
查看代表组件的数据可视化表示形式。
-
控制器采用的视图上的用户输入,并在组件的数据的变化反映。
-
Swing 组件模型作为一个单独的元素和景观,是棒状控制器部分用户界面中的元素。使用这种方式,Swing具有可插拔的外观与风格架构。
Swing 特点
-
重量轻 - Swing 组件是独立的原生操作系统的API与Swing API控件呈现大多采用纯JAVA代码,而不是底层的操作系统调用。
-
丰富的控件 - Swing 提供了一套丰富的先进的控制系统,如树,JTabbedPane,滑块,颜色选择器,表格控件
-
高度可定制 - Swing 控件可以定制视觉外观是非常简单的方法,独立的内部表示。
-
可插拔的外观和感觉 - 基于Swing GUI应用程序外观和风格基于可用值,可以在运行时改变。
Swing开发环境安装
本节将指导如何下载和设置Java 在您的机器上。请按照下列步骤来设置环境。
Java SE 是免费的,提供的链接下载Java。所以根据您的操作系统,下载一个版本。
按照说明下载 java 和运行 .exe 在你的机器上安装Java。一旦在机器上安装了Java,还需要设置环境变量指向正确的安装目录:
对于Windows 2000/XP/win7 路径:
假设您已经安装了Java在c:Program Filesjavajdk 目录:
-
右键单击 '我的电脑r' 并选择 '属性'。
-
点击 '环境变量' 按钮下 '高级' 标签。
-
现在在 '路径' 变量,它也包含Java可执行文件的路径。 例如,如果路径当前设置为 'C:WINDOWSSYSTEM32', 然后可更改你的路径为 'C:WINDOWSSYSTEM32;c:Program Filesjavajdkin'.
适用于Linux,UNIX,Solaris和FreeBSD的路径:
应设置环境变量PATH指向Java二进制文件已经安装。如果你这样做有困难,请参阅shell文件。
例如,如果使用bash作为shell,添加以下行到结束行 “.bashrc文件中: '.bashrc: export PATH=/path/to/java:$PATH'
流行的Java编辑器:
编写Java程序,需要一个好的文本编辑器。在市场上有更复杂的 IDE。但现在,可以考虑以下两种:
-
记事本: 在Windows机器上,你可以使用任何简单的文本编辑器(如记事本)(本教程推荐TextPad)。
-
Netbeans:是一个Java IDE,它是开源和免费,可下载 http://www.netbeans.org/index.htmll.
-
Eclipse : 也是一个Java IDE Eclipse开源社区开发的,可以直接从网上下载 http://www.eclipse.org/.
Swing控件
每一个用户界面参考主要有以下三个方面:
-
UI 元素: 有核心视觉元素,最终用户看到并与之交互。 GWT 提供了一个巨大的名单变化更复杂,本教程我们从基本的广泛使用和常见的元素。
-
布局: 他们定义 UI 元素如何应安排在屏幕上,并提供一个最终的外观和感觉的GUI(图形用户界面)。在“布局”一章,这部分将被覆盖。
-
行为: 这些事件发生时,与用户交互的 UI 元素。这部分将被覆盖在事件处理“一章。
每个Swing 控件继承属性从以下组件的类层次结构。
Sr. No. | 类 & 描述 |
---|---|
1 | Component 容器是一个抽象基类的非菜单用户界面控件摆动。部分指图形表示的对象 |
2 | Container Container是一个组件,它可以包含其他Swing组件。 |
3 | JComponent JComponent是一个基类,所有Swing UI 组件。为了使用继承自JComponent 的 swing组件,组件必须是一个包容层次结构,其根是一个顶层的Swing容器。 |
SWING UI 元素:
以下是常用的控件列表而设计的图形用户界面使用Swing。
Sr. No. | 控件& 描述 |
---|---|
1 | JLabel 一个JLabel对象是在容器中放置文本的一个组成部分。 |
2 | JButton 该类创建标记的按钮。 |
3 | JColorChooser JColorChooser提供一个用于控制窗格设计,让用户操作和选择颜色。 |
4 | JCheck Box JCheckBox的是一个图形化的组件可以在一个(true)或关闭(false)状态时。 |
5 | JRadioButton JRadioButton类是一个图形化的组件可以在一个(true)或关闭(false)状态时。在一组。 |
6 | JList JList组件向用户展示一个滚动的文本项列表。 |
7 | JComboBox JComboBox组件为用户提供了一个选择显示菜单。 |
8 | JTextField JTextField的对象是一个文本组件,它允许编辑的单行文本。 |
9 | JPasswordField JPasswordField中对象是一个专门用于输入密码的文本组件。 |
10 | JTextArea JTextArea对象是一个文本组件,它允许编辑的多行文本。 |
11 | ImageIcon ImageIcon的控件的图标界面,实现从图像绘制图标 |
12 | JScrollbar Scrollbar控件代表一个滚动条组件以让用户从范围选择的值。 |
13 | JOptionPane JOptionPane的规定设置标准对话框,提示用户提供值或向其发出通知。 |
14 | JFileChooser JFileChooser的控制代表一个对话框窗口,用户可以选择一个文件。 |
15 | JProgressBar 随着任务的进展,进度条接近完成显示任务的完成百分比。 |
16 | JSlider JSlider让用户以图形界的时间间隔内滑动旋钮选择一个值。 |
17 | JSpinner JSpinner让用户从一个有序序列中选择一个数字或者一个对象值的单行输入字段。 |
Swing事件处理
什么是事件?
一个对象的状态变化被称为事件,即事件描述源状态的变化。事件产生的结果与用户交互的图形用户界面组件。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面的活动,使一个事件的发生。
事件的类型
事件可以被大致分为两类:
-
前台事件 - 这些事件需要用户直接互动。在图形用户界面中的图形组件交互的人产生的后果。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面等
-
后台事件 - 这些事件,需要最终用户的交互是已知的作为背景的事件。操作系统的中断,硬件或软件故障,定时器到期时,操作完成的背景事件的例子。
事件处理是什么?
事件处理机制,控制的事件,并决定如果一个事件发生时,会发生什么。这种机制被称为事件处理程序,在事件发生时执行的代码。 Java使用代理事件模型来处理事件。该模型定义了标准的机制来生成和处理事件。让我们简要介绍这种模式。
代理事件模型具有以下的主要参与者,即:
-
源 - 源是一个对象,在该对象上的事件发生。它的处理器提供发生事件的信息来源是可靠的。 JAVA提供与源对象的类。
-
监听器 - 它也被称为作为事件handler.Listener是负责产生响应一个事件。从Java实现的角度来看,监听器也是一个对象。等待直到它接收到一个事件监听器。一旦收到事件,监听器进程的事件就返回。
这种方法的好处是,用户界面逻辑完全分开,生成该事件的逻辑。用户界面元素是能够委派的事件处理单独的一段代码。在这个模型中,需要与源对象注册监听使侦听器能够接收事件通知。这是一个有效的方式处理事件,因为这些事件通知只发送给那些监听器要接收他们。
参与事件处理的步骤
-
用户单击该按钮时产生该事件。
-
现在有关事件类的对象是自动创建的信息源和事件在同一对象得到填充。
-
事件对象被转发注册监听器类的方法。
-
该方法现在得到执行并返回。
要记住的要点有关监听器
-
为了设计一个监听类,我们必须开发一些监听器接口。这些监听器接口预测一些公共的抽象监听器类必须实现的回调方法。
-
如果不执行任何预定义的接口,类不能作为源对象的监听器类。
回调方法
这些方法所提供的API提供程序,被定义为应用程序员和应用程序开发者调用。这里的回调方法代表一个事件的方法。在响应一个事件的Java JRE将触发回调方法。所有这些回调方法的监听器接口。
如果一个组件需要一些监听器会听的事件源必须注册自己监听。
事件处理例子
选择使用任何编辑器创建以下java程序在 D:/ > SWING > com > yiibai > gui >
SwingControlDemo.java
package com.yiibai.gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingControlDemo {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public SwingLayoutDemo(){
prepareGUI();
}
public static void main(String[] args){
SwingLayoutDemo swingLayoutDemo = new SwingLayoutDemo();
swingLayoutDemo.showEventDemo();
}
private void prepareGUI(){
mainFrame = new JFrame("Java SWING Examples");
mainFrame.setSize(400,400);
mainFrame.setLayout(new GridLayout(3, 1));
headerLabel = new JLabel("",JLabel.CENTER );
statusLabel = new JLabel("",JLabel.CENTER);
statusLabel.setSize(350,100);
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
mainFrame.setVisible(true);
}
private void showEventDemo(){
headerLabel.setText