下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

如何用Java中的AWT制作窗口和程序片

作者:课课家教育     来源: http://www.kokojia.com点击数:1203发布时间: 2016-02-23 18:30:12

标签: java程序java构建java内部类

大神带你学编程,欢迎选课

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

如何用Java中的AWT制作窗口和程序片_java程序_java构建_课课家

  //: 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文件中的程序片标记有关的其他任何内容都保持不变。

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程