Java小程序基础
我们先来了解一下GUI支持多少个Package:
- AWT(抽象窗口工具包)
- 摇摆
制作 GUI 应用程序的回溯:
Java于 1996 年 1 月 23 日(JDK 1.0)推出,当时它只支持 CUI(字符用户界面)应用程序。但是在 1996 年微软的 VB(Visual Basic)被首选用于 GUI 编程。因此, Java开发人员在匆忙中(即在 7 天内)已经从操作系统(OS)给出了对 GUI 的支持。现在,按钮等组件是依赖于平台的(即在每个平台上都会有不同大小、形状的按钮)。但是他们对所有平台的这些组件进行了交集,并提供了一个包含这些交集的小型库,它可以在 AWT(Abstract Window Toolkit)技术中使用,但它没有对话框等高级功能。
现在要运行Applet, Java需要一个浏览器,当时只有微软的“Internet Explorer”,但微软相信垄断。于是“SUN Micro-System”(开发Java的公司)与另一家被称为“Netscape”(开发Java Script)的公司签约,现在“Netscape”公司也被称为“Mozilla Firefox”,我们都知道这是一个浏览器。现在,这两家公司开发了一种名为“SWING”的技术,好处是SWING组件是由Java自己生产的。因此,现在它是独立于平台的,并且还添加了一些 AWT 技术中没有的附加功能。所以我们可以说 SWING 比 AWT 技术要先进得多。
什么是小程序?
小程序是可以嵌入到网页中的Java程序。它在网络浏览器中运行并在客户端工作。小程序使用 APPLET 或 OBJECT 标记嵌入到 HTML 页面中,并托管在 Web 服务器上。
小程序用于使网站更具活力和娱乐性。
要点:
- 所有小程序都是Java.applet.Applet类的子类(直接或间接)。
- 小程序不是独立的程序。相反,它们在 Web 浏览器或小程序查看器中运行。 JDK 提供了一个标准的小程序查看器工具,称为小程序查看器。
- 一般来说,applet 的执行不是从 main() 方法开始的。
- System.out.println()不执行小程序窗口的输出。而是使用各种 AWT 方法处理它,例如drawString() 。
小程序的生命周期:
了解调用上图中显示的各种方法的顺序很重要。当 applet 开始时,将按以下顺序调用以下方法:
- 在里面( )
- 开始( )
- 画( )
当 applet 终止时,将发生以下方法调用序列:
- 停止( )
- 破坏( )
让我们更仔细地看看这些方法。
1. init() : init()方法是第一个被调用的方法。这是您应该初始化变量的地方。此方法仅在您的小程序运行时调用一次。
2. start( ) :在init( )之后调用start( )方法。它也被称为在一个小程序停止后重新启动它。请注意, init()调用一次,即第一次加载applet 时,而start()则在每次applet 的HTML 文档显示在屏幕上时调用。因此,如果用户离开网页并返回,则小程序会在start()处恢复执行。
3.paint():每次必须重绘基于AWT 的applet 的输出时,都会调用paint()方法。这种情况可能有几个原因。例如,运行小程序的窗口可能会被另一个窗口覆盖,然后再被覆盖。或者小程序窗口可能被最小化然后恢复。
当小程序开始执行时,也会调用paint() 。不管是什么原因,每当applet 必须重绘它的输出时, paint()就会被调用。
paint()方法有一个图形类型的参数。此参数将包含图形上下文,它描述了小程序运行的图形环境。每当需要输出到小程序时,都会使用此上下文。
注意:这是上面提到的所有方法中唯一的方法,它是参数化的。它的原型是
公共无效油漆(图形g)
其中 g 是类 Graphic 的对象引用。
现在问题来了:
Q.在paint() 方法的原型中,我们创建了一个对象引用,但没有创建它的对象。但是如何在不创建对象的情况下创建对象引用呢?
答。每当我们在参数中传递对象引用时,对象将由其调用者本身提供。在这种情况下,paint() 方法的调用者是浏览器,所以它会提供一个对象。当我们在普通的Java程序中创建一个非常基本的程序时,也会发生同样的事情。例如:
public static void main(String []args){}
在这里,我们创建了一个对象引用,但没有创建它的对象,但它仍然运行,因为它是调用者,即 JVM 将为它提供一个对象。
4. stop( ) :当 Web 浏览器离开包含 applet 的 HTML 文档时调用stop()方法——例如,当它转到另一个页面时。当调用stop( )时,applet 可能正在运行。当applet 不可见时,您应该使用stop()来挂起不需要运行的线程。如果用户返回页面,您可以在调用start( )时重新启动它们。
5. destroy():当环境确定你的小程序需要从内存中完全删除时,会调用destroy()方法。此时,您应该释放小程序可能正在使用的所有资源。 stop()方法总是在destroy()之前调用。
创建 Hello World 小程序:
让我们从 HelloWorld 小程序开始:
Java
// A Hello World Applet
// Save file as HelloWorld.java
import java.applet.Applet;
import java.awt.Graphics;
// HelloWorld class extends Applet
public class HelloWorld extends Applet
{
// Overriding paint() method
@Override
public void paint(Graphics g)
{
g.drawString("Hello World", 20, 20);
}
}
Java
// A Hello World Applet
// Save file as HelloWorld.java
import java.applet.Applet;
import java.awt.Graphics;
/*
*/
// HelloWorld class extends Applet
public class HelloWorld extends Applet
{
// Overriding paint() method
@Override
public void paint(Graphics g)
{
g.drawString("Hello World", 20, 20);
}
}
Java
//code to illustrate paint
//method gets called again
//and again
import java.applet.*;// used
//to access showStatus()
import java.awt.*;//Graphic
//class is available in this package
import java.util.Date;// used
//to access Date object
public class GFG extends Applet
{
public void paint(Graphics g)
{
Date dt = new Date();
super.showStatus("Today is" + dt);
//in this line, super keyword is
// avoidable too.
}
}
解释:
- 上面的Java程序以两个 import 语句开始。第一个 import 语句从 applet 包中导入 Applet 类。您创建的每个基于 AWT(抽象窗口工具包)的小程序都必须是小程序类的子类(直接或间接)。第二条语句从 AWT 包中导入 Graphics 类。
- 程序的下一行声明类 HelloWorld。这个类必须声明为公共的,因为它将被程序外部的代码访问。在 HelloWorld 中, paint()被声明。此方法由 AWT 定义,并且必须由 applet 覆盖。
- 内部paint()是对drawString()的调用,它是Graphics 类的成员。此方法输出从指定 X,Y 位置开始的字符串。它具有以下一般形式:
void drawString(String message, int x, int y)
这里,message 是要从 x,y 开始输出的字符串。在Java窗口中,左上角是位置 0,0。小程序中对drawString()的调用导致消息“Hello World”从位置 20,20 开始显示。
请注意,小程序没有main()方法。与Java程序不同,applet 不会在main()处开始执行。事实上,大多数小程序甚至没有main()方法。相反,当其类的名称被传递给小程序查看器或网络浏览器时,小程序开始执行。
运行 HelloWorld 小程序:
输入 HelloWorld 的源代码后。 Java,以与编译Java程序相同的方式进行编译(使用javac命令)。但是,使用Java命令运行 HelloWorld 会产生错误,因为它不是应用程序。
java HelloWorld
Error: Main method not found in class HelloWorld,
please define the main method as:
public static void main(String[] args)
有两种标准方式可以运行小程序:
- 在兼容 Java 的 Web 浏览器中执行小程序。
- 使用小程序查看器,例如标准工具 applet-viewer。小程序查看器在窗口中执行您的小程序。这通常是测试您的小程序的最快和最简单的方法。
下面将描述这些方法中的每一个。
1. 使用启用Java的网络浏览器:要在网络浏览器中执行小程序,我们必须编写一个简短的 HTML 文本文件,其中包含一个加载小程序的标记。为此,我们可以使用 APPLET 或 OBJECT 标签。使用 APPLET,这里是执行 HelloWorld 的 HTML 文件:
width 和 height 语句指定小程序使用的显示区域的尺寸。 APPLET 标签包含其他几个选项。创建此 html 文件后,您可以使用它来执行小程序。
注意: Chrome 和 Firefox 不再支持 NPAPI( Java小程序所需的技术)。参考这里
2. 使用appletviewer:这是运行applet 最简单的方法。要使用小程序查看器执行 HelloWorld,您还可以执行前面显示的 HTML 文件。例如,如果前面的 HTML 文件保存为
运行HelloWorld.html,然后下面的命令行将运行 HelloWorld :
appletviewer RunHelloWorld.html
3. 带有Java源文件的 appletviewer:如果您在包含 APPLET 标记的Java源代码文件的开头包含一个注释,那么您的代码将与必要的 HTML 语句的原型一起记录,您只需通过以下方式运行编译的 applet使用您的Java源代码文件启动小程序查看器。如果使用此方法,HelloWorld 源文件如下所示:
Java
// A Hello World Applet
// Save file as HelloWorld.java
import java.applet.Applet;
import java.awt.Graphics;
/*
*/
// HelloWorld class extends Applet
public class HelloWorld extends Applet
{
// Overriding paint() method
@Override
public void paint(Graphics g)
{
g.drawString("Hello World", 20, 20);
}
}
使用这种方法,首先编译 HelloWorld。 Java文件,然后只需运行以下命令即可运行小程序:
appletviewer HelloWorld
为了证明上述观点,即一次又一次地调用paint。
为了证明这一点,我们先来研究一下什么是Applet中的“状态栏”:
“状态栏”在小程序的左下方窗口中可用。要使用状态栏并在其中写入内容,我们使用方法 showStatus(),其原型为
公共无效显示状态(字符串)
默认状态栏显示“Applet Started”
默认背景颜色为白色。
为了证明paint()方法被一次又一次地调用,下面是代码:
注意:此代码与 Netbeans IDE 相关。
Java
//code to illustrate paint
//method gets called again
//and again
import java.applet.*;// used
//to access showStatus()
import java.awt.*;//Graphic
//class is available in this package
import java.util.Date;// used
//to access Date object
public class GFG extends Applet
{
public void paint(Graphics g)
{
Date dt = new Date();
super.showStatus("Today is" + dt);
//in this line, super keyword is
// avoidable too.
}
}
注意:- 在这里我们可以看到,如果屏幕最大化或最小化,我们将获得更新的时间。这表明paint() 被一次又一次地调用。
基于 HTML 的 Applet 的功能
- 显示 Web 应用程序的动态网页。
- 播放声音文件。
- 显示文件
- 播放动画
对Java小程序施加的限制
出于安全原因,对Java小程序施加以下限制:
- 小程序不能加载库或定义本地方法。
- 小程序通常不能在执行主机上读取或写入文件。
- 小程序无法读取某些系统属性。
- 小程序不能建立网络连接,除非它来自它的主机。
- 小程序无法在正在执行它的主机上启动任何程序。