Java图形用户界面之Applet设计

2024-09-05 10:27:38 浏览数 (2)

前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1 Java Applet 是一种用Java编写的、含有可视化内容并嵌入在网页中、由浏览器软件下载并运行的程序。它的编辑和编译过程与 Java Application(Java 应用程序)相同,但它的结构与 Java 应用程序不同。

Java Applet 没有程序执行的入口 main()方法,不能独立运行,因此 Java Applet 应嵌入在一个网页内,由浏览器软件解释执行。在Java Applet中,可以实现图形绘制、字体和颜色控制、动画和声音的播放、人机交互及网络交流等功能。由于 Java Applet 能够跨平台、跨网络进行传输,而且为网页提供了动态的、交互的内容,因此其在 Internet 上得到了很好的应用。


一、Applet的基本工作原理与使用局限

Applet的基本工作原理

Java Applet 通过<APPLET><IAPPLET>标签嵌入 HTML 网页,当用户使用浏览器软件浏览这个HTML 页面时,浏览器通过文件名找到 Java Applet 字节码文件并下载到用户的机器上,利用浏览器的Java解释器直接执行该字节码。Applet的基本工作原理如图所示。

由于有浏览器的支持,Applet 不需要建立自己的主流程框架,也不需要有专门的图形界面。Applet 需要做的就是接收和响应浏览器发来的消息或事件。

下面以一个功能简单的Java Applet 为例,介绍 Java Applet的结构及运行过程,它的运行结果是输出一条信息“Hello World!”。

代码示例

ps:Applet自JDK9开始已经被弃用,需要更改JDK

一个简单的Java Applet的结构通常包括以下方法:

  1. init():初始化方法,用于设置Applet的初始状态和变量。
  2. start():启动方法,用于开始Applet的执行。
  3. stop():停止方法,用于暂停Applet的执行。
  4. destroy():销毁方法,用于释放Applet占用的资源。

以上方法通过继承Applet类来实现。下面是一个简单的例子:

代码语言:javascript复制
import java.applet.Applet;
import java.awt.Graphics;

public class HelloWorldApplet extends Applet {
    
    public void paint(Graphics g) {
        g.drawString("Hello World!", 20, 20);
    }
    
}

上面的代码定义了一个名为HelloWorldAppletApplet类,它通过继承Applet类来获取Applet的基本功能。在paint()方法中,我们使用Graphics对象在Applet的画布上输出一条信息“Hello World!”

运行Java Applet需要将其与一个HTML文件一起使用。下面是一个简单的HTML文件示例:

代码语言:javascript复制
<html>
    <head>
        <title>Hello World Applet</title>
    </head>
    <body>
        <applet code="HelloWorldApplet.class" width="300" height="300">
        </applet>
    </body>
</html>

上面的HTML文件中,通过使用<applet>标签将Java Applet嵌入到页面中。code属性指定了Applet类文件的名称(在这个例子中是HelloWorldApplet.class),widthheight属性指定了Applet的宽度和高度。

当浏览器加载HTML文件时,会自动加载并执行Applet类。运行结果会在浏览器中显示一个300x300大小的画布,并输出一条信息“Hello World!”

Java Applet 的使用局限

在Java 中将执行程序分成木地代码和远程代码两种。本地代码被视为可信任的,而远程代码则被看作不可信的。对于可信的本地代码,可以访问一切本地资源,如 Jara Application 程序,而Java Applet 是从网络上下载到客户端的远程代码,被视为不可信的。

由于 Applet 的特殊性, Java 出于安全性的考虑,不允许 Applet 随意访问客户端资源,如不允许对本地文件进行读写,而只允许 Applet 在受限的环境中运行,这个限制程序运行的环境就是Java 沙箱。沙箱机制就是将Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源的访问,通过这样的措施来保证对不可信代码进行有效隔离,防止对本地系统造成破坏。下图示意了 Java沙箱安全机制原理。

Java沙箱安全机制原理

由于上述对 Applet的限制,因此 Applet 不能像 Java Application 那样任意访问本地系统资源,如内存、文件系统等。常用的 Web 浏览器,其默认的安全设置也不允许 Java Applet 直接运行。但通过对浏览器的安全级别、数据签名、安全策略的修改和配置,是可以实现Java Applet 对本地资源的访问的。有关技术实现细节,请参阅相关文献资料。

Applet的生命周期与运行方式

Applet的生命周期是指将 Applet下载到本地浏览器,到用户退出测览器终止 Applen 运行的过程。Appler 的生命周期包括Applet 的初始、运行、中止与消亡几个状态,这几个状态与以下几个public 方法, 即 public void init()public void start( ), public void stop()public void destroy()密切相关。

  • init()方法:用来完成主类实例的初始化工作,如创建和初始化程序运行所需要的对象实例、加载图形和声音、参数初始化等。
  • start()方法:用来启动浏览器运行 Applet 的主线程。浏览器在调用 init () 方法初始化Applet类的实例之后,就会自动调用 start()方法,除此之外,当用户离开包含 Applet 的页面后又再返回时,或者当浏览器从最小化状态恢复为窗口时,系统都会自动再执行一遍 start()方法。
  • stop()方法:类似于 start ()方法的逆操作,当用户浏览其他页面,或切换到其他系统应用时,浏览器将自动调用stop () 方法暂停执行 Applet的主线程。
  • destroy()方法:当用户退出浏览器时,浏览器自动调用 Applet 实例的 destroy ()方法完成释放资源、关闭连接等操作。

下图描述了Applet 生命周期状态及4个生命周期方法之间的转换关系。

Applet 运行时,首先由浏览器调用 init()方法,执行一些初始化操作。该方法常被重写,实现设置布局管理器、绘制窗口、数据初始化、加载图形和声音等功能。在 init()方法完成后,将调用 start()方法,Applet 进入运行状态,start()方法在 Applet 每次显示时都要调用,例如浏览器由最小化恢复显示,浏览器由另外页面返回到Applet所在页面显示。Applet转入后台运行时,调用 stop()方法暂停 Applet运行,进入中止状态。关闭浏览器时调用 destroy()方法,释放所占用的资源终止Applet的运行。

二、Applet类

Applet类的层次结构

Applet 类是 Java 类库中一个重要的系统类,存在于 java.applet 包中。JApplet 类是Applet类的扩展,增加了对swing 组件的支持。Applet 类和 JApplet 类是所有 Java Applet 应用的基类,所有的 Java 小程序都必须继承它们。Applet 类和 JApplet 类的层次关系如图所示。

Applet 类是Java的系统类java.awt.Panel的子类,因此它也是一个面板容器,其默认布局管理器是FlowLayout, 可以在Applet 面板中添加其他界面成分,如各种 AWT组件。JApplet 是Swing 中的容器,可以在 JApplet 中添加 Swing 组件,其默认布局管理器是BorderLayout。

常用方法

生命周期方法

Applet的生命周期是指将 Applet下载到本地浏览器,到用户退出测览器终止 Applen 运行的过程。Appler 的生命周期包括Applet 的初始、运行、中止与消亡几个状态,这几个状态与以下几个public 方法, 即 public void init()public void start( ), public void stop()public void destroy()密切相关。

  • init()方法:用来完成主类实例的初始化工作,如创建和初始化程序运行所需要的对象实例、加载图形和声音、参数初始化等。
  • start()方法:用来启动浏览器运行 Applet 的主线程。浏览器在调用 init () 方法初始化Applet类的实例之后,就会自动调用 start()方法,除此之外,当用户离开包含 Applet 的页面后又再返回时,或者当浏览器从最小化状态恢复为窗口时,系统都会自动再执行一遍 start()方法。
  • stop()方法:类似于 start ()方法的逆操作,当用户浏览其他页面,或切换到其他系统应用时,浏览器将自动调用stop () 方法暂停执行 Applet的主线程。
  • destroy()方法:当用户退出浏览器时,浏览器自动调用 Applet 实例的 destroy ()方法完成释放资源、关闭连接等操作。
显示方法

Applet 继承了 Component类的组件绘制与显示的方法,具有一般AWT组件的图形绘制功能。

  • public void paint(Graphics g):在 Applet 中绘制指定内容(线条形状、图像、字符串等)。Graphics 类用来完成一些较低级的图形用户界面绘制的类,其中包括画圆、点、线、多边形及显示简单文本。参数g是Graphics类的实例,具体绘制方法由参数g调用.Graphics 类的常用方法如下:
    • drawlmage(Image img, intx, int y, ImageObserver observer)在(x. y) 起始位置处绘制图像。
    • drawSring(Sring s, int x,int y)显示字符串,x和y是显示字符串的起始位置。
    • drawLine(int xl, int yl, int x2, int y2)绘制直线,x1、y1和x2、y2是直线的起点和终止点坐标。
    • drawRect(int x, int y, int width, int height)绘制矩形。
    • drawOval(int x, int y, int width, int height)绘制椭圆
    • fillRect(int x, int y, int width, int height) 填充矩形。
    • void setColor(Colorc)设置画笔颜色。
    • void setBackground(Color c)设置背景颜色。
  • public void repaint():重新绘制方法,在需要绘制时调用该方法。该方法将会自动调用 update()方法实现重绘。
  • public void update(Graphics g):更新方法,用背景色清除原有显示内容,再调用paint()完成绘制。

在 Applet 中,显示更新是由一个专门的 AWT 线程控制的。该线程主要负责两种处理:第一,在Applet的初次显示,或运行过程中浏览器窗口大小发生变化而引起 Applet 的显示发生变化时,该线程将调用 Applet 的 paint()方法进行 Applet 绘制;第二,Applet 代码需要更新显示内容,从程序中调用repaint()方法,则AWT线程在接收到该方法的调用后,将调用 Applet 的 update()方法,而update()方法再调用组件的 paint()方法实现显示的更新。

多媒体支持方法
  • public Image gelmage(URL url):按绝对 URL 指定的地址装入图像。
  • public Image getimage(URL url, String name):按相对 URL 指定的地址和文件名加载图像。此处的参数 name 是相对于 url 的图像文件的表示。

以上两个方法中出现了 URL的两种形式:

  • 绝对 URL:http://210.28.32.169/sjweb/picture/pic.gif
  • 相对 URL:= 基准 URL 相对路径及文件名。

例如:可将绝对 URL 的http://210.28.32.169/sjweb/picture/pic.gif改写为相对 URL 的表示,基准 URL =http://210.28.32.169/sjweb/。

  • 相对路径及文件名=picture/pic.gif

由于相对 URL 具有更大灵活性,因此在实际应用中很常见。

  • public AudioClip getAudioClip(URL url):按绝对 URL 指定的地址获取音频文件。
  • public AudioClip getAudioClip(URL url, String name):按相对 URL指定的地址和文件名获取音频文件。
  • public final static newAudioClip(URL url):从指定的相对 URL 上获得一个AudioClip对象,然后通过该对象调用 AudioClip 类的 play()、loop()和 stop()播放音频文件。
  • void play(URL url):直接播放绝对 URL上的音频文件。
  • void play(URL url, String name):播放相对URL 和指定文件名的音频文件。
其他方法
  • public boolean isActive():判断一个 Applet 是否处于活动状态。
  • public URL getDocumentBase():获取包含 Applet 字节码的 HTML 文件的 URL。
  • public URL getCodeBase():获取 Applet字节码文件的 URL。
  • public String getParameter(String name):获取该Applet 指定参数的值。
  • public void resize(int width, int height):调整 Applet 运行的窗口尺寸。
  • public void resize(Dimensiond):调整Applet 运行的窗口尺寸。
  • public void showStatus(String msg):在浏览器的状态条中显示指定的信息。

三、Applet和GUI

Applet 的主要目的是将动态执行与交互功能引入到 Web 页面中,因此几乎所有的Applet 都需要创建 GUI 组件与用户进行动态交互,通过图形、文本等方式显示运行结果和状态。

基于AWT和Swing的GUI

AWT组件与Applet用户界面

Applet 可以通过使用 AWT 组件创建GUI。Applet 是 AWT 的Panel类的子类,其本身就是一个面板,可以像操作其他容器一样,向 Applet 中增加组件并且使用布局管理器控制组件在面板上的位置和大小。Applet 的默认布局管理器是 FlowLayout.

在编写 Applet 的 GUI时,应首先考虑使用哪些组件,如标签(Label)、按钮(Button)、文本框(TextField)等,一般在 init ()方法中创建相应的组件。

代码示例

以下是一个示例代码,用于实现在Applet窗口中输入两个数并求和后显示结果:

代码语言:javascript复制
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class SumApplet extends Applet {
   private JTextField firstNumField;
   private JTextField secondNumField;
   private JLabel resultLabel;

   public void init() {
      setLayout(new FlowLayout());
      
      firstNumField = new JTextField(10);
      secondNumField = new JTextField(10);
      resultLabel = new JLabel("Result: ");
      
      JButton addButton = new JButton("Add");
      addButton.addActionListener(new ButtonListener());
      
      add(new JLabel("First Number: "));
      add(firstNumField);
      add(new JLabel("Second Number: "));
      add(secondNumField);
      add(addButton);
      add(resultLabel);
   }

   private class ButtonListener implements ActionListener {
      public void actionPerformed(ActionEvent e) {
         String firstNumStr = firstNumField.getText();
         String secondNumStr = secondNumField.getText();
         
         double firstNum = Double.parseDouble(firstNumStr);
         double secondNum = Double.parseDouble(secondNumStr);
         
         double sum = firstNum   secondNum;
         
         resultLabel.setText("Result: "   sum);
      }
   }
}

要在浏览器中运行此Applet,请将代码保存为名为"SumApplet.java"的文件。然后,在命令行中运行以下命令将其编译为.class文件:

代码语言:javascript复制
javac SumApplet.java

然后,使用以下HTML代码将Applet嵌入到网页中:

代码语言:javascript复制
<applet code="SumApplet.class" width="400" height="300"></applet>

将上述代码中的"width"和"height"属性值调整为您想要的Applet窗口大小。最后,用Web浏览器打开包含上述HTML代码的网页,您应该看到一个可在Applet窗口中输入两个数并求和的界面。

Swing组件与Applet用户界面

使用 Swing 组件的 Applet 可以定义为JApplet 类的子类,JApplet 也是容器的一种,其默认布局管理器是 BorderLayout, 其中可以包含 Swing组件实现 GUI设计。

向JApplet 中添加组件时,既可以直接添加,也可以把组件添加到 Swing Applet 的内容面板。

  • 直接向 Applet 窗口中添加各组件。
  • 用 getContentPane()方法获得JApplet 的内容面板,再向内容面板中增加组件。
    • Container contentPane= getContentPane();
    • contentPane.add(someComponent);
代码示例

以下是一个基于Swing实现的简单Applet示例:

代码语言:javascript复制
import javax.swing.*;
import java.awt.*;

public class SwingAppletExample extends JApplet {
    public void init() {
        // 设置Applet的大小
        setSize(400, 300);

        // 创建一个面板,并设置背景颜色
        JPanel panel = new JPanel();
        panel.setBackground(Color.YELLOW);

        // 创建一个标签,并设置文本
        JLabel label = new JLabel("Hello, Applet!");
        label.setFont(new Font("Arial", Font.BOLD, 24));

        // 将标签添加到面板上
        panel.add(label);

        // 将面板添加到Applet上
        add(panel);
    }
}

要运行这个示例,将上述代码保存为 SwingAppletExample.java 文件,然后使用Java编译器进行编译。编译完成后,可以将生成的 .class 文件嵌入到一个HTML页面中以显示Applet。例如,可以创建一个名为 SwingAppletExample.html 的HTML文件,并将以下代码粘贴到文件中:

代码语言:javascript复制
<html>
<head>
    <title>Swing Applet Example</title>
</head>
<body>
    <applet code="SwingAppletExample.class" width="400" height="300">
        Your browser does not support the Applet tag.
    </applet>
</body>
</html>

然后,通过在浏览器中打开这个HTML文件,就可以看到一个简单的Applet,其中显示了一个带有黄色背景的标签。

Applet与事件处理

Applet中的事件处理机制与Java Application 中相同,采用委托事件模型。

代码示例

下面是一个使用Applet处理文本框动作事件和鼠标事件的示例代码:

代码语言:javascript复制
import java.awt.*;
import java.awt.event.*;

public class TextEventApplet extends java.applet.Applet implements ActionListener, MouseListener {
    TextField textField;
    Label label;
    
    public void init() {
        textField = new TextField(20);
        label = new Label();
        
        textField.addActionListener(this);
        textField.addMouseListener(this);
        
        add(textField);
        add(label);
    }
    
    public void actionPerformed(ActionEvent e) {
        String text = textField.getText();
        label.setText("文本框动作事件:"   text);
    }
    
    public void mouseClicked(MouseEvent e) {
        label.setText("鼠标点击事件");
    }
    
    public void mouseEntered(MouseEvent e) {
        label.setText("鼠标进入文本框");
    }
    
    public void mouseExited(MouseEvent e) {
        label.setText("鼠标离开文本框");
    }
    
    public void mousePressed(MouseEvent e) {
        // 不处理
    }
    
    public void mouseReleased(MouseEvent e) {
        // 不处理
    }
}

这个示例创建一个Applet,包含一个文本框和一个标签。文本框用于输入文本,标签用于显示事件的信息。

init()方法中,将文本框的动作事件和鼠标事件添加为监听器。当文本框发生动作事件(用户按下回车键)时,actionPerformed()方法将被调用,该方法从文本框中获取文本并在标签中显示。

当鼠标在文本框上发生点击事件时,mouseClicked()方法将被调用,在标签中显示相应信息。其他的鼠标事件(鼠标按下、鼠标释放等)在本示例中不进行处理。

四、Applet与多媒体支持

图像显示

目前Java所支持的图像格式有 GIF、JPEG 和 PNG 三种。在Applet 中显示图像要首先加载图像,然后再进行图像绘制。

可以使用 getlmage()方法进行加载,public Image getlmage(URL ur)方法不是等到图像完全加载后才返回,而是立即返回。该方法返回的是一个 Image 对象,其中封装了参数指定的图像文件。

绘制图像可以利用 Graphics 类提供的 drawImage()方法:

代码语言:javascript复制
public boolean drawImage(Image img, int x, int y, ImageObserver observer)

其中,Image img 表示要绘制的图像对象;int x, int y表示绘制图像的左上角坐标,以像素为单位;ImageObserver observer 是实现了 ImageObserver 接口类的对象,体现了Java 中追踪图像加载过程的机制,当图像对象的信息一更新,就通知该对象,一般以 this作为参数的值,即传递当前对象的引用去实现这个接口

代码示例

下面是一个通过Applet显示指定图像的示例代码:

代码语言:javascript复制
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;

public class ImageApplet extends Applet {
  private Image image;

  @Override
  public void init() {
    URL imageURL = getClass().getResource("image.jpg");
    image = new ImageIcon(imageURL).getImage();
  }

  @Override
  public void paint(Graphics g) {
    g.drawImage(image, 0, 0, this);
  }
}

注意:在上面的示例代码中,假设有一个名为 “image.jpg” 的图像文件与Applet类文件位于同一目录中。如果图像文件位于不同的位置,需要根据实际情况更改 getResource() 方法的参数。

声音播放

目前 Java 中支持 AU、AIFF、WAV、MIDI、RFM 等多种格式的音频文件格式,可以利用 Applet 类和 AudioClip 接口来播放声音。

  • Applet类中与音频播放有关的方法有以下两类。
    • public AudioClip getAudioClip(...):用于加载音频文件,返回一个 AudioClip 对象。
    • public void play(URL url):直接播放指定url上的音频文件,如果没有找到指定的文件,该方法直接返回,不执行任何操作。
  • AudioClip 是播放音频的援口,其中以下3个方法用于 AudioClip 对象的播放。
    • public void play():从头开始播放音频文件。
    • public void loop():循环播放。
    • public void stop():停止播放。

一般在 Applet 中音频文件的加载只进行一次,可以放在init()方法中。而音频文件的播放和停止可能进行很多次,可以放在 start()和 stop()方法中,或者通过相应按钮的事件处理方式进行控制。

代码示例

可以使用Java Applet来实现音频文件的播放。以下是一个简单的示例:

代码语言:javascript复制
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AudioPlayerApplet extends Applet implements ActionListener {
    private Button playButton;
    private Button stopButton;
    private AudioClip audioClip;

    public void init() {
        playButton = new Button("Play");
        stopButton = new Button("Stop");
        playButton.addActionListener(this);
        stopButton.addActionListener(this);
        add(playButton);
        add(stopButton);

        audioClip = getAudioClip(getCodeBase(), "audiofile.wav"); // 替换为实际的音频文件路径
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == playButton) {
            audioClip.play();
        } else if (e.getSource() == stopButton) {
            audioClip.stop();
        }
    }
}

在HTML文件中使用<applet>标签来引用Applet:

代码语言:javascript复制
<!DOCTYPE html>
<html>
<head>
    <title>Audio Player Applet</title>
</head>
<body>
    <applet code="AudioPlayerApplet.class" width="300" height="200">
    </applet>
</body>
</html>

请将上述代码中的audiofile.wav替换为实际的音频文件路径。此示例创建了一个简单的音频播放器Applet,其中包含播放按钮和停止按钮。当用户点击播放按钮时,音频文件会开始播放;当用户点击停止按钮时,音频文件会停止播放。

请注意,由于浏览器安全性的限制,某些浏览器可能不再支持Java Applet。因此,如果您希望在现代浏览器中使用音频播放功能,可以考虑使用HTML5的<audio>元素或使用JavaScript库(如Howler.js)来完成音频播放操作。

五、Applet的参数传递

Applet和HTML

由于 Applet 无法独立运行,因此需将 Applet 字节码嵌入到 HTML 网页的<APPLET></APPLET>标签中,再由浏览器打开该HTML 文楷,由浏览器软件运行 Applet.

例如,在 HelloWorldApplet.html 中包含了一个 APPLET 标记:

代码语言:javascript复制
<APPLET code= "HelloWorldApplet.class" height=200 width=300></APPLET>

这个标记规定了浏览器要加载 HelloWorldApplet.class 字节码文件,浏览器将到HelloWorldApplet.html 文件所在的URL 寻找该文件。

<APPLE>标记的完整语法中可以有若干属性,其中必需的属性是 CODE、 WIDTH、HEIGHT,其余为可选项。

CODE="AppletFile":必需属性,它通知浏览器 Applet字节码文件名称。

CODEBASE="codebaseURL":可选属性,它指定 Applet 字节码的路径或 URL。当Applet字节码文件的保存位置与所嵌入的HTML 文档不同时,需要用此参数指明字节码文件的位置,该位置用 URL 格式表示。

ALT="alternateText":可选属性,它指定在浏览器能识别标记但不能运行Java Applet时显示的提示内容。

ARCHIVE ="archiveList”可选属性,它描述一个或多个包含有“预加载”的类或其他资源的文档。

OBJECT= "serialiaedApplet”:可选属性,它给出包含 Applet 序列化表示的文件名。此时init()方法不调用,start()方法将被调用。

WIDTH=""HEIGHT="":两个必需属性。程序的高度和宽度,单位为像素。

ALIGN='"":可选属性,指定 Applet 界面区域在浏览器窗口中的对齐方式。

<PARAM NAME="APPLETattribute'" VALUE="value'>:可选属性,指定向 Applet 传递参数的名字和内容,一个标记只能传递一个字符串参数。在Applet 中使用getParamter()方法可以得到这些参数值。

Applet与参数

为了增强 Applet的通用性,Applet 允许从HTML 标记中获取参数,程序运行时,不同参数值将导致不同的运行结果。可以在 HTML 文件中,通过中的标记为Applet指定参数。例如:

代码语言:javascript复制
<applet code="***.class" width=300 height=200>
<param name=n value="6">
<param name=age value="20">
</applet>

其中用两个<param>指定了两个参数n和age,它们的值为"6"和"20",n和 age 将会传递其值给 Applet 中的相应接收变量。另一方面,在 Applet 中利用 public String getParameter("参数名”)方法获取 HTML传递的参数值,并利用该值在 Applet 中进行处理,该方法返回结果为字符串。

代码示例

下面是一个使用Java编写的Applet,可以通过HTML文档传入两个整数,并计算它们的最大公约数。

代码语言:javascript复制
import java.applet.Applet;
import java.awt.Graphics;

public class GCDApplet extends Applet {
    private int num1;
    private int num2;
    private int gcd;

    public void init() {
        String strNum1 = getParameter("num1");
        String strNum2 = getParameter("num2");

        try {
            num1 = Integer.parseInt(strNum1);
            num2 = Integer.parseInt(strNum2);
        } catch (NumberFormatException e) {
            num1 = 0;
            num2 = 0;
        }

        gcd = calculateGCD(num1, num2);
    }

    private int calculateGCD(int a, int b) {
        if (b == 0) {
            return a;
        } else {
            return calculateGCD(b, a % b);
        }
    }

    public void paint(Graphics g) {
        g.drawString("num1: "   num1, 10, 20);
        g.drawString("num2: "   num2, 10, 40);
        g.drawString("GCD: "   gcd, 10, 60);
    }
}

要将此Applet嵌入到HTML文档中,可以使用以下代码:

代码语言:javascript复制
<applet code="GCDApplet.class" width="300" height="200">
    <param name="num1" value="12">
    <param name="num2" value="18">
</applet>

在上面的示例中,num1num2是通过<param>元素传递给Applet的两个整数。Applet将计算并显示这两个整数的最大公约数。

0 人点赞