|
|
《JavaTM程序设计语言 基础》第
1 部分 前一课中,我们讨论了
Project Swing APIs
这个简单的应用程序应用了Project Swing 代码。启动应用程序时,会出现左 侧所示的窗口;点击按钮时,则会出现右侧的窗口。再次点击按钮后,您将回到 最初的左侧窗口。
导入语句 以下为 SwingUI.java
方法代码。方法代码顶部有四行导入语句。这几行代码清楚地表明了程序要使用 的 JavaTM
API 类。若要导入整个 awt 程序 包,可用 import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
类的声明 上述四行代码之后是类的声明,类声明的作用是指示应用程序用户界面的顶层 方框为实现 class SwingUI extends JFrame
implements ActionListener{
Java API 给出供您使用的类和接口,接口定义的是一套方法但并不实现这些 方法。 实例变量 类声明之后的代码行是对 JLabel text, clicked;
JButton button, clickButton;
JPanel panel;
private boolean _clickMeMode = true;
构造函数 构造函数(如下所述)用于创建用户界面组件和 SwingUI(){
text = new JLabel("I'm a Simple Program");
clicked = new JLabel("Button Clicked");
button = new JButton("Click Me");
//Add button as an event listener
button.addActionListener(this);
clickButton = new JButton("Click Again");
//Add button as an event listener
clickButton.addActionListener(this);
//Create panel
panel = new JPanel();
//Specify layout manager and background color
panel.setLayout(new BorderLayout(1,1));
panel.setBackground(Color.white);
//Add label and button to panel
getContentPane().add(panel);
panel.add(BorderLayout.CENTER, text);
panel.add(BorderLayout.SOUTH, button);
}
本程序使用了 //Create panel
panel = new JPanel();
//Specify layout manager and background color
panel.setLayout(new BorderLayout(1,1));
panel.setBackground(Color.white);
//Add label and button to panel
getContentPane().add(panel);
panel.add(BorderLayout.CENTER, text);
panel.add(BorderLayout.SOUTH, button);
}
若要了解有关其它布局管理器以及如何使用这些管理器的知识,请查阅JDC文件 探索 AWT 布局管理器。 对 动作监视 除实现 组件类有相应的添加方法添加动作监视器。代码中,JButton 类有一个 addActionListener 方法。传递给 addActionListener 的参数是 this,它表示 SwingUI 动作监视器被添加给该按钮,而按钮所产生的动作则因此被传送给 SwingUI 对象中的 actionPerformed 方法。 button = new JButton("Click Me");
//Add button as an event listener
button.addActionListener(this);
事件处理 actionPerformed 方法传递代表所发生的动作事件的事件对象。之后,此方法 再使用一个 if 语句来判断哪一个组件发生了该事件,并根据判断结果采取相应 的动作。 public void actionPerformed(ActionEvent event){
Object source = event.getSource();
if (_clickMeMode) {
text.setText("Button Clicked");
button.setText("Click Again");
_clickMeMode = false;
} else {
text.setText("I'm a Simple Program");
button.setText("Click Me");
_clickMeMode = true;
}
}
不同组件的事件处理说明见 Java 教程 中的 事件处理 部分 Main方法
public static void main(String[] args){
//Create top-level frame
SwingUI frame = new SwingUI();
frame.setTitle("Example");
//This code lets you close the window
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
//This code lets you see the frame
frame.pack();
frame.setVisible(true);
}
}
关闭窗口的代码为给程序添加事件处理功能提供了一个简便的方法。如果您所 需要的事件监视器接口所提供的功能比程序实际使用的功能多,则请使用adapter (适配器) 类。Java API 为带一个以上方法的所有监视器接口提供适配器类。这样 ,您就可以用适配器类来代替监视器接口,从而只执行您所需要的方法。示例中, WindowListener 接口有 7 个方法,而本程序只需要执行 windowClosing 方法, 所以该示例用 WindowAdapter 类代替。 这段代码对 WindowAdapter 类进行了扩展而重载了windowClosing 方法。 新 的关键字生成了已扩展的内部类的一个无名实例。之所以无名,是因为您没有为 这个类赋予一个名称,并且若不再次执行其代码的情况下也无法生成该类的其它 实例。而它之所以是一个内部类,是因为扩展后的类定义嵌套在 SwingUI 类中。 这种方法只需要几行代码即可实现,而执行 WindowListener 接口则需要实现 6 个空方法。务必把 WindowAdapter 对象添加到主框对象中,这样方框对象才会 监视窗口事件。 WindowListener l = new WindowAdapter() {
//The instantiation of object l is extended to
//include this code:
public void windowClosing(WindowEvent e){
System.exit(0);
}
};
frame.addWindowListener(l);
Applet 程序再访问 利用您在 第 3 课:创建 Applet 程序 和本课中所学到的知识,把本课示例程序转换 成一个 applet 程序。您应亲自尝试,然后再看其 答案。
简言之,applet 和应用程序版本之间的区别如下:
更多信息 有关 Project Swing 的详细介绍,请参阅 Swing Connection 和 Swing 基础第 1 部分。 或者参阅 JFC Project Swing 教程:GUI 构建指南。 若欲了解有关其他可用布局管理器和任何使用这些管理器的知识,请参阅 JDC 文件 开发 AWT 布局管理器。 [TOP] |
|
||||||||||||||||||||||||||||||||||||||