按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
的,如果我们愿意深入地研究,可以从SUN 公司的在线文档中获取更多的资料。
13。19。1 Swing 有哪些优点
当我们开始使用Swing 库时,会注意到它在技术上向前迈出了巨大的一步。Swing 组件是 Bean ,因此他们可
以支持Bean 的任何开发环境中使用。Swing 提供了一个完全的UI 组件集合。因为速度的关系,所有的组件
都很小巧的(没有“重量级”组件被使用),Swing 为了轻便在 Java 中整个被编写。
最重要的是我们会希望 Swing 被称为“正交使用”;一旦我们采用了这种关于库的普遍的办法我们就可以在
任何地方应用它们。这主要是因为 Bean 的命名规则,大多数的时候在我编写这些程序例子时我可以猜到方法
名并且第一次就将它拼写正确而无需查找任何事物。这无疑是优秀库设计的品质证明。另外,我们可以广泛
地插入组件到其它的组件中并且事件会正常地工作。
键盘操作是自动被支持的——我们可以使用 Swing 应用程序而不需要鼠标,但我们不得不做一些额外的编程
工作(老的 AWT 中需要一些可怕的代码以支持键盘操作)。滚动被毫不费力地支持——我们简单地将我们的
组件到一个 JScrollPane 中,同样我们再增加它到我们的窗体中即可。其它的特征,例如工具提示条只需要
一行单独的代码就可执行。
Swing 同样支持一些被称为“可插入外观和效果”的事物,这就是说UI 的外观可以在不同的平台和不同的操
作系统上被动态地改变以符合用户的期望。它甚至可以创造我们自己的外观和效果。
13。19。2 方便的转换
如果我们长期艰苦不懈地利用 Java 1。1 版构建我们的UI,我们并不需要扔掉它改变到Swing 阵营中来。幸
运的是,库被设计得允许容易地修改——在很多情况下我们可以简单地放一个“J”到我们老AWT 组件的每个
类名前面即可。下面这个例子拥有我们所熟悉的特色:
//: JButtonDemo。java
// Looks like Java 1。1 but with J's added
package c13。swing;
import java。awt。*;
import java。awt。event。*;
import java。applet。*;
import javax。swing。*;
public class JButtonDemo extends Applet {
467
…………………………………………………………Page 469……………………………………………………………
JButton
b1 = new JButton(〃JButton 1〃);
b2 = new JButton(〃JButton 2〃);
JTextField t = new JTextField(20);
public void init() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e){
String name =
((JButton)e。getSource())。getText();
t。setText(name + 〃 Pressed〃);
}
};
b1。addActionListener(al);
add(b1);
b2。addActionListener(al);
add(b2);
add(t);
}
public static void main(String args'') {
JButtonDemo applet = new JButtonDemo();
JFrame frame = new JFrame(〃TextAreaNew〃);
frame。addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System。exit(0);
}
});
frame。getContentPane()。add(
applet; BorderLayout。CENTER);
frame。setSize(300;100);
applet。init();
applet。start();
frame。setVisible(true);
}
} ///:~
这是一个新的输入语句,但此外任何事物除了增加了一些“J”外,看起都像这 Java 1。1 版的AWT。同样,
我们不恰当的用add()方法增加到 Swing JFrame 中,除此之外我们必须像上面看到的一样先准备一些
“content pane”。我们可以容易地得到Swing 一个简单的改变所带来的好处。
因为程序中的封装语句,我们不得不调用像下面所写的一样调用这个程序:
java c13。swing。JbuttonDemo
在这一节里出现的所有的程序都将需要一个相同的窗体来运行它们。
13。19。3 显示框架
尽管程序片和应用程序都可以变得很重要,但如果在任何地方都使用它们就会变得混乱和毫无用处。这一节
余下部分取代它们的是一个Swing 程序例子的显示框架:
//: Show。java
// Tool for displaying Swing demos
package c13。swing;
import java。awt。*;
import java。awt。event。*;
import javax。swing。*;
468
…………………………………………………………Page 470……………………………………………………………
public class Show {
public static void
inFrame(JPanel jp; int width; int height) {
String title = jp。getClass()。toString();
// Remove the word 〃class〃:
if(title。indexOf(〃class〃) != …1)
title = title。substring(6);
JFrame frame = new JFrame(title);
frame。addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System。exit(0);
}
});
frame。getContentPane()。add(
jp; BorderLayout。CENTER);
frame。setSize(width; height);
frame。setVisible(true);
}
} ///:~
那些想显示它们自己的类将从 JPanel 处继承并且随后为它们自己增加一些可视化的组件。最后,它们创建一
个包含下面这一行程序的main():
Show。inFrame(new MyClass(); 500; 300);
最后的两个自变量是显示的宽度和高度。
注意JFrame 的标题是用 RTTI 产生的。
13。19。4 工具提示
几乎所有我们利用来创建我们用户接口的来自于Jponent 的类都包含一个称为setToolTipText(string)
的方法。因此,几乎任何我们所需要表示的(对于一个对象jc 来说就是一些来自Jponent 的类)都可以
安放在窗体中:
jc。setToolTipText(〃My tip〃);
并且当鼠标停在Jponent 上一个超过预先设置的一个时间,一个包含我们的文字的小框就会从鼠标下弹
出。
13。19。5 边框
Jponent 同样包括一个称为 setBorder()的方法,该方法允许我们安放一些各种各样有趣的边框到一些可
见的组件上。下面的程序例子利用一个创建JPanel 并安放边框到每个例子中的被称为 showBorder()的方
法,示范了一些有用的不同的边框。同样,它也使用RTTI 来找我们使用的边框名(剔除所有的路径信息),
然后将边框名放到面板中间的 JLable 里:
//: Borders。java
// Different Swing borders
package c13。swing;
import java。awt。*;
import java。awt。event。*;
import javax。swing。*;
import javax。swing。border。*;
public class Borders extends JPanel {
static JPanel showBorder(Border b) {
469
…………………………………………………………Page 471……………………………………………………………
JPanel jp = new JPanel();
jp。setLayout(new BorderLayout());
String nm = b。getClass()。toString();
nm = n