学习笔记之Java 2 图形设计卷II——第2章 applet和应用程序
1.APPLET:运行在支持Java的Web浏览器内的JAVA小程序。
浏览器将对Web页进行初始化和启动applet程序;当我们不需要显示该Web页时,
浏览器将启动相应的方法终止applet程序的运行。
1.1由下面四个方法来控制APPLET的运行:
(1)init() 打开带有applet的文档时,调用init()方法初始化applet
(2)start() 打开带有applet的文档时,在init()方法之后调用start()方法,启动applet
(3)stop() 关闭带有applet的文档时调用。注意:stop()总在destroy()方法之前被调用
(4)destroy() 关闭浏览器时调用。调用destroy()是为了整理曾经使用的资源
一个简单的applet例子://StarterApplet.java
import java.applet.Applet;
import java.awt.Label;
public class StarterApplet extends Applet {
private Label label;
public void init() {
System.out.println("Applet::init()");
}
public void start() {
System.out.println("Applet::start()");
label = new Label("Starter");
add(label);
}
public void stop() {
System.out.println("Applet::stop()");
remove(label);
}
public void destroy() {
System.out.println("Applet::destroy()");
}
}
file://随便一个HTML文件如001.html,加入<applet code="StarterApplet.class" width=2000 height=2000></applet>
<html>
<title>Sample Applet</title>
<body>
<applet code="StarterApplet.class" width=800 height=600></applet>
</body>
</html>
file://命令行下输入:appletviewer 001.html,看到了吧,当然也可以用浏览器看。再强调一遍stop()总在destroy()方法之前被调用!
1.2要更新java.awt.Component的显示方式用下面三个方法:
paint() 绘制构件
repaint() 尽可能早地调度构件的update方法调用
update() 重画构件,默认方案为刷新屏幕并调用paint方法
2.Java应用程序:在Java解释器中运行
与APPLET的区别: (1)Java应用程序必须有main()方法
(2)Java应用程序需要有一个窗口,则它必须扩展AWT的Frame类
(3)Java应用程序没有与applet相同的安全性约束
一个简单的应用程序例子://StarterApplication.java
import java.awt.Event;
import java.awt.Frame;
import java.awt.event.*;
import java.awt.Label;
public class StarterApplication extends Frame {
public static void main(String args[]) {
StarterApplication app =new StarterApplication("Starter Application");
app.setSize(300,100);
app.show ();
System.out.println("StarterApplication::main()");
}
public StarterApplication(String frameTitle) {
super(frameTitle);
add (new Label("Starter", Label.CENTER), "Center");//默认的布局管理器为BorderLayout
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
dispose();
System.exit(0);
}
});
}
}
3.既是APPLET又是应用程序:既有main方法又extends Applet。//StarterCombined.java
import java.applet.Applet;
import java.awt.Event;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.*;
public class StarterCombined extends Applet {
private Label label;
public static void main(String args[]) {
StarterCombinedFrame app =new StarterCombinedFrame("Starter Application");
app.setSize(300,100);
app.show ();
System.out.println("StarterCombinedFrame::main()");
}
public void init() {
System.out.println("Applet::init()");
}
public void start() {
System.out.println("Applet::start()");
label = new Label("Starter");
add(label);
}
public void stop() {
System.out.println("Applet::stop()");
remove(label);
}
public void destroy() {
System.out.println("Applet::destroy()");
}
}
class StarterCombinedFrame extends Frame {
public StarterCombinedFrame(String frameTitle) {
super(frameTitle);
StarterCombined applet = new StarterCombined();
applet.start();
add (applet, "Center");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
dispose();
System.exit(0);
}
});
}
}
由DOS中打印的文字看到:如果程序作为一个applet程序运行,那么main()方法将被忽略。
小结?applet程序和应用程序都由Java解释器运行。应用程序在运行时必须建立自己的框架,
而applet程序则是在支持Java的浏览器或appletviewer提供的框架内运行。
因此,应用程序必须处理窗口关闭事件,而applet的运行则同浏览器或appletviewer控制。
应用程序可自由地读写文件,而不可靠的applet程序则不允许执行这些操作。
写后话:我觉得写的很肤浅。例子很简单,无吸引人处。可能才开始吧,但愿能渐入佳境。