用JAVA怎么做程序_如何用Java中的AWT制作窗口和程序片

这篇博客介绍了如何将一个Java应用程序转化为可同时作为应用程序和程序片使用的代码。通过添加main()方法和WL窗口监听器内部类,实现了这一目标。此外,还讨论了Java1.1 AWT的改进,如使用BorderLayout常量进行布局管理,以及如何通过匿名内部类简化窗口监听器。最后,文章提到了JAR文件对于程序片下载速度的提升,并给出了打包JAR文件的命令行示例。
摘要由CSDN通过智能技术生成

我们经常都需要创建一个类,使其既可作为一个窗口调用,亦可作为一个程序片调用。为做到这一点,只需为程序片简单地加入一个main()即可,令其在一个Frame(帧)里构建程序片的一个实例。作为一个简单的示例,下面让我们来看看如何对Button2New.java作一番修改,使其能同时作为应用程序和程序片使用:

35a20b83764a91512ebc047ffa8b3baf.png

//: Button2NewB.java

// An application and an applet

import java.awt.*;

import java.awt.event.*; // Must add this

import java.applet.*;

public class Button2NewB extends Applet {

Button

b1 = new Button("Button 1"),

b2 = new Button("Button 2");

TextField t = new TextField(20);

public void init() {

b1.addActionListener(new B1());

b2.addActionListener(new B2());

add(b1);

add(b2);

add(t);

}

class B1 implements ActionListener {

public void actionPerformed(ActionEvent e) {

t.setText("Button 1");

}

}

class B2 implements ActionListener {

public void actionPerformed(ActionEvent e) {

t.setText("Button 2");

}

}

// To close the application:

static class WL extends windowAdapter {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

}

// A main() for the application:

public static void main(String[] args) {

Button2NewB applet = new Button2NewB();

Frame aFrame = new Frame("Button2NewB");

aFrame.addWindowListener(new WL());

aFrame.add(applet, BorderLayout.CENTER);

aFrame.setSize(300,200);

applet.init();

applet.start();

aFrame.setVisible(true);

}

} ///:~

内部类WL和main()方法是加入程序片的唯一两个元素,程序片剩余的部分则原封未动。事实上,我们通常将WL类和main()方法做一结小的改进复制和粘贴到我们自己的程序片里(请记住创建内部类时通常需要一个外部类来处理它,形成它静态地消除这个需要)。我们可以看到在main()方法里,程序片明确地初始化和开始,因为在这个例子里浏览器不能为我们有效地运行它。当然,这不会提供全部的浏览器调用stop()和destroy()的行为,但对大多数的情况而言它都是可接受的。如果它变成一个麻烦,我们可以:

(1) 使程序片句柄为一个静态类(以代替局部可变的main()),然后:

(2) 在我们调用System.exit()之前在WindowAdapter.windowClosing()中调用applet.stop()和applet.destroy()。

注意最后一行:

aFrame.setVisible(true);

这是Java 1.1 AWT的一个改变。show()方法不再被支持,而setVisible(true)则取代了show()方法。当我们在本章后面部分学习Java Beans时,这些表面上易于改变的方法将会变得更加的合理。

这个例子同样被使用TextField修改而不是显示到控制台或浏览器状态行上。在开发程序时有一个限制条件就是程序片和应用程序我们都必须根据它们的运行情况选择输入和输出结构。

这里展示了Java 1.1 AWT的其它小的新功能。我们不再需要去使用有错误倾向的利用字符串指定BorderLayout定位的方法。当我们增加一个元素到Java 1.1版的BorderLayout中时,我们可以这样写:

aFrame.add(applet, BorderLayout.CENTER);

我们对位置规定一个BorderLayout的常数,以使它能在编译时被检验(而不是对老的结构悄悄地做不合适的事)。这是一个显著的改善,并且将在这本书的余下部分大量地使用。

2. 将窗口接收器变成匿名类

任何一个接收器类都可作为一个匿名类执行,但这一直有个意外,那就是我们可能需要在其它场合使用它们的功能。但是,窗口接收器在这里仅作为关闭应用程序窗口来使用,因此我们可以安全地制造一个匿名类。然后,main()中的下面这行代码:

aFrame.addWindowListener(new WL());

会变成:

aFrame.addWindowListener(

new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

这有一个优点就是它不需要其它的类名。我们必须对自己判断是否它使代码变得易于理解或者更难。不过,对本书余下部分而言,匿名内部类将通常被使用在窗口接收器中。

3. 将程序片封装到JAR文件里

一个重要的JAR应用就是完善程序片的装载。在Java 1.0版中,人们倾向于试法将它们的代码填入到单个的程序片类里,因此客户只需要单个的服务器就可适合下载程序片代码。但这不仅使结果凌乱,难以阅读(当然维护也然)程序,但类文件一直不能压缩,因此下载从来没有快过。

JAR文件将我们所有的被压缩的类文件打包到一个单个儿的文件中,再被浏览器下载。现在我们不需要创建一个糟糕的设计以最小化我们创建的类,并且用户将得到更快地下载速度。

仔细想想上面的例子,这个例子看起来像Button2NewB,是一个单类,但事实上它包含三个内部类,因此共有四个。每当我们编译程序,我会用这行代码打包它到一个JAR文件:

jar cf Button2NewB.jar *.class

这是假定只有一个类文件在当前目录中,其中之一来自Button2NewB.java(否则我们会得到特别的打包)。

现在我们可以创建一个使用新文件标签来指定JAR文件的html页,如下所示:

archive="Button2NewB.jar"

width=200 height=150>

与HTML文件中的程序片标记有关的其他任何内容都保持不变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值