Java图形用户界面之Applet设计

news2024/9/26 3:29:22

Applet设计

  • 前言
  • 一、Applet的基本工作原理与使用局限
    • Applet的基本工作原理
      • 代码示例
    • Java Applet 的使用局限
      • Java沙箱安全机制原理
    • Applet的生命周期与运行方式
  • 二、Applet类
    • Applet类的层次结构
    • 常用方法
      • 生命周期方法
      • 显示方法
      • 多媒体支持方法
      • 其他方法
  • 三、Applet和GUI
    • 基于AWT和Swing的GUI
      • AWT组件与Applet用户界面
        • 代码示例
      • Swing组件与Applet用户界面
        • 代码示例
    • Applet与事件处理
      • 代码示例
  • 四、Applet与多媒体支持
    • 图像显示
      • 代码示例
    • 声音播放
      • 代码示例
  • 五、Applet的参数传递
    • Applet和HTML
    • Applet与参数
      • 代码示例


前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
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类来实现。下面是一个简单的例子:

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文件示例:

<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窗口中输入两个数并求和后显示结果:

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文件:

javac SumApplet.java

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

<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示例:

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文件,并将以下代码粘贴到文件中:

<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处理文本框动作事件和鼠标事件的示例代码:

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()方法:

public boolean drawImage(Image img, int x, int y, ImageObserver observer)

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

代码示例

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

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来实现音频文件的播放。以下是一个简单的示例:

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:

<!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 标记:

<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指定参数。例如:

<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文档传入两个整数,并计算它们的最大公约数。

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文档中,可以使用以下代码:

<applet code="GCDApplet.class" width="300" height="200">
    <param name="num1" value="12">
    <param name="num2" value="18">
</applet>

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字符操作函数和内存操作函数

1 字符操作函数 1.strlen size_t strlen ( const char * str ); 函数功能&#xff1a;返回以\0结尾的字符串长度&#xff0c;不包含\0。 注&#xff1a;strlen返回值是一个无符号整数size_t。 #include <stdio.h>int main() {const char*str1 "abcdef";const…

Linux基础软件-selinux库文件swap

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux进阶部分又分了很多小的部分,我们刚讲完了Linux日常运维。讲的那些东西都算是系统自带的&#xff0c;但是Linux作为一个…

LVGL 控件之圆弧(lv_arc)

目录 一、圆弧部件1、部件组成2、lv_art_t3、圆弧部件角度设置4、圆弧部件旋转设置5、圆弧的模式选择6、圆弧部件的变化率设置7、移除旋钮8、事件9、获取/设置信息相关的 API 二、例程 一、圆弧部件 1、部件组成 圆弧&#xff08;lv_arc&#xff09;部件由三个部分组成&#…

学习之SQL语言之DDL

查询 查询所有数据 SHOW DATABASES&#xff1b; 查询当前数据库 SELECT DATABASE(); 创建 CREATE DATABASE IF NOT EXISTS 数据库名&#xff1b; 删除 DROP DATABASE IF EXISTS 数据库名&#xff1b; 使用 USE 数据库名&#xff1b; 查询当前数据库所有表 SHOW TABLES; 查…

优化大型语言模型微调:MoLA层级专家分配策略

人工智能咨询培训老师叶梓 转载标明出处 大模型&#xff08;LLMs&#xff09;的微调过程中&#xff0c;计算资源的需求巨大&#xff0c;这促使研究者们探索参数高效微调&#xff08;PEFT&#xff09;技术。低秩适应&#xff08;LoRA&#xff09;和专家混合模型&#xff08;MoE…

超分 Real-ESRGAN 使用笔记

效果图 目录 依赖项: 视频推理入口: 图片推理入口文件: RealESRGAN_x4plus 12g显存不够 RealESRGAN_x4plus_anime_6B 的效果 树枝之间产生了蒙版 RealESRNet_x4plus 有点模糊 2022年开源的 GitHub - xinntao/Real-ESRGAN: Real-ESRGAN aims at developing Practical…

操作系统 --王道计算机考研--学习笔记

文章目录 前言第一章 引言1.1 什么是操作系统&#xff1f;1 操作系统作为虚拟机2 操作系统作为资源管理者3 为上层提供服务-- 系统调用 2.操作系统特征与发展分类2.1 操作系统特征1.并发2.共享3.虚拟4.异步 2.2 操作系统发展和分类 3.操作系统的的运行机制和中断异常、系统调用…

vue脚手架的创建

一、安装node环境 切换阿里云镜像 npm config set registry https://registry.npm.taobao.org 2、全局安装vue-cli和webpack 已经安装过node.js之后和淘宝镜像的话&#xff0c;vue的运行环境基本上就搭建好了&#xff0c;只需再安装全局的webpack&#xff08;命令行&#…

【大模型理论篇】RoPE旋转位置编码底层数学原理分析

1. 位置编码对于NLP模型的作用 位置编码&#xff08;Positional Encoding&#xff09;在大模型&#xff08;例如Transformer架构&#xff09;中起到了非常重要的作用。没有位置编码的信息&#xff0c;模型会丧失序列的顺序信息&#xff0c;导致模型退化成一个简单的“词…

物品租赁​​​​​​​|基于SprinBoot+vue的物品租赁​​​​​​​系统(源码+数据库+文档)

物品租赁系统 基于SprinBootvue的物品租赁系统 一、前言 二、系统设计 三、系统功能设计 5.1 系统功能模块 5.2 管理员功能模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大…

【单片机原理及应用】实验:数码管的中断控制

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 掌握外部中断的工作原理&#xff0c;学习中断编程与程序调试方法。 二、实验内容 【参照图表】 &#xff08;1&#xff09;创建一个包含80C51固件&#xff0c;采用…

汽车乘客热舒适度大挑战,如何利用仿真技术提高汽车环境舒适度

舒适性在人们选择汽车的决定性方面占比越来越重&#xff0c;而汽车乘员舱环境的舒适性是指为乘员提供舒适愉快便利的乘坐环境与条件&#xff0c;包括良好的平顺性、车内的低噪声、适宜的空气环境以及良好的驾驶操作性能。 舒适性 经济性 安全性、动力性 典型的乘员舱热舒适性模…

git常见命令行及分支规范

文章目录 GIT常见命令行原理图基本设置初始化和克隆仓库文件管理提交更改查看状态和历史分支管理远程仓库交互高级功能GIT常见分支风格1. 单一主干分支(Single Main Branch)//极少使用优点:缺点:2. 多主干分支(Multiple Main Branches)//个人小型项目采用优点:缺点:3. …

OpenCV Jet颜色映射和HSV颜色空间对比

目录 一、概述 二、Jet颜色空间映射 2.1优势 2.2颜色变化范围 2.3应用场景 三、HSV 颜色空间 3.1优势 3.2颜色分布 3.3应用场景 四、Jet与HSV区别 4.1对比总结 4.2选择建议 OpenCV图像处理与应用实战算法汇总地址&#xff1a; OpenCV 图像处理应用实战算法列表汇总…

H264编码原理(二)帧内预测

假设你去了一家餐厅吃饭&#xff0c;这家餐厅提供了一个有趣的点餐方式。服务员会根据餐厅最近最受欢迎的菜品组合&#xff0c;推荐九个套餐给你。你的任务是从这九个套餐中找到一个最接近你心中想要的菜品组合的套餐&#xff0c;然后告诉服务员你想替换哪些菜&#xff0c;以得…

PS快速如何抠图章?

1、选择--色彩范围--颜色选择(反相)--确定 2、选中范围后--按delete删除非选中内容--就能得到图章 3、图层叠加来加深颜色和补全缺失点

合宙低功耗4G模组Air780EQ——开发板使用说明

CORE-AIR780E 开发板是合宙通信推出的基于 Air780E 模组所开发的&#xff0c; 包含电源&#xff0c;SIM 卡&#xff0c;USB&#xff0c;天线&#xff0c;音频等必要功能的最小硬件系统。 以方便用户在设计前期对Air780E模块 进行性能评估&#xff0c;功能调试&#xff0c;软件…

Python__面向对象__多态学习

目录 一、多态 1.多态定义理解 2.实例属性和类属性 3.类相关的函数 (1) 实例方法 (2)类方法 (3)静态方法 一、多态 1.多态定义理解 在Python中&#xff0c;多态是一种特性&#xff0c;类似于一个接口&#xff0c;允许在一个对象中的一个操作可作用在不同类型的对象上…

OpenGL3.3_C++_Windows(36)

PBR_IBL镜面部分 镜面部分并不能像漫反射部分一样将BRDF部分像常量一样提取出来&#xff0c;因为它整个积分上不是常数&#xff0c;因为它受到wi和w0的影响&#xff0c;就比如一个x的等式&#xff0c;不能把x部分提取出来一样&#xff0c;他是随着等式变化的如果试图解算所有入…

uni-app开发日志:将schema2code生成的新增页和修改页整合成一页

有没有想过&#xff0c;add和edit页面其实没多大差别&#xff1f; 我之前自研的系统add和edit都是一个页面&#xff0c;只要判断一下当前有没有id传递来&#xff0c;为空来就是新增。 这样如果页面修改时&#xff0c;才能尽量少改动代码&#xff0c;少出错。 对比add.vue和edit…