Java Applets与JavaFX GUI应用开发全解析
1. Java Applets基础
Java Applets是一种可以嵌入到网页中的小型Java程序,能为网页增添动态和交互性。下面我们来了解一些Applets开发中的关键知识点。
1.1 播放音频文件
在Applets中,有多种方式可以播放音频文件。可以使用Applet类的
play
方法,也可以使用
AudioClip
对象。
-
play
方法
:此方法可用于加载并播放音频文件,播放一次后会释放占用的内存以进行垃圾回收。
-
AudioClip
对象
:它有
play
、
loop
和
stop
等方法。
play
方法用于播放音频,
loop
方法用于循环播放,
stop
方法用于停止播放。
支持的音频文件格式包括
.au
(Sun Audio File)、
.mid
或
.rmi
(MIDI File)、
.wav
(Windows Wave File)。
1.2 Applet类的重要方法
-
init方法 :该方法在Applet初始化时调用,类似于GUI应用类的构造函数。 -
getDocumentBase和getCodeBase方法 :getDocumentBase方法返回调用Applet的HTML文件的URL对象,getCodeBase方法返回Applet的.class文件的URL对象。
1.3 常见错误避免
在开发Applets时,需要注意以下常见错误:
-
HTML标签问题
:
- 忘记HTML文档中的结束标签,大多数HTML标签都有开始标签和结束标签,忘记结束标签会导致页面显示不正常。
- 混淆
<head></head>
标签和
<h1></h1>
等标题标签,
<head></head>
标签标记文档的头部部分,而
<h1></h1>
标签标记标题,是大字体的粗体文本。
-
图形绘制问题
:
- 绘制形状时使用的X和/或Y坐标超出组件范围,这样形状将不会显示。
- 重写
paint
或
paintComponent
方法时,未调用超类的相应方法,重写方法应在执行其他操作之前调用超类的版本。
- 用从
JComponent
扩展的组件重写
paint
方法,应仅对AWT组件、
JFrame
组件或
JApplet
组件重写
paint
方法。
- 更新用于在组件上绘制形状的数据后,未调用
repaint
方法来强制调用
paint
或
paintComponent
方法。
-
监听器问题
:
- 编写鼠标监听器或鼠标移动监听器时,未为不需要的方法提供空定义,必须为监听器接口指定的所有方法提供定义,可通过继承适配器类来避免。
-
Timer对象问题
:忘记启动
Timer
对象,
Timer
对象在调用其
start
方法启动之前不会开始生成动作事件。
2. 练习题与解答
下面是一些关于Applets的练习题及解答,帮助大家巩固知识。
2.1 选择题
| 题目 | 选项 | 答案 |
|---|---|---|
| HTML文档的哪个部分包含所有在浏览器窗口中产生输出的标签和文本? |
a. head
b. content c. body d. output | c |
| 哪个标签会在插入点处显示一条水平线? |
a.
<hr/>
b.
<br/>
c.
<p/>
d.
<head>
| a |
| HTML文档中,出现在哪对标签之间的所有内容是网页的内容? |
a.
<content></content>
b.
<html></html>
c.
<head></head>
d.
<page></page>
| b |
| Applets支持哪些音频文件格式来存储音频? |
a..au (Sun Audio File)
b. mid或.rmi (MIDI File) c. wav (Windows Wave File) d. 以上所有 | d |
| 鼠标按钮按下后释放时调用哪个方法? |
a. mouseReleased
b. mouseEntered c. mouseClicked d. mousePressed | a |
| 哪种组件能确保Applet与所有支持Java的浏览器兼容? |
a. Swing
b. AWT c. JFrame d. HTML | a |
| 哪个Applet方法代替构造函数被调用? |
a. startUp
b. beginApplet c. invoke d. init | d |
| Sun JDK附带的哪个程序可以在不使用Web浏览器的情况下加载和执行Applet? |
a. applettest
b. appletload c. appletviewer d. viewapplet | c |
| 继承自Applet或Frame的类没有以下哪一项? |
a. an add方法
b. an init方法 c. a content pane d. a layout manager | c |
| Graphics类的哪个方法用于设置字体? |
a. setFont
b. setLayout c. drawString d. setColor | a |
| 在扩展JApplet或JFrame的类中,重写哪个方法以获取Graphics对象的引用? |
a. paint
b. paintComponent c. getGraphics d. graphics | a |
| 在扩展JPanel的类中,重写哪个方法以获取Graphics对象的引用? |
a. paint
b. paintComponent c. getGraphics d. graphics | b |
drawLine
方法是哪个类的成员?
|
a. JApplet
b. Applet c. JFrame d. Graphics | d |
为了强制调用
paint
方法来更新组件的显示,应该怎么做?
|
a. 调用
paint
方法
b. 调用
repaint
方法
c. 调用
paintAgain
方法
d. 什么都不做;无法强制调用
paint
方法
| b |
| 实现哪个接口的类可以处理鼠标拖动事件? |
a. MouseListener
b. ActionListener c. MouseMotionListener d. MouseDragListener | c |
| Applet类的哪个方法类似于GUI应用类的构造函数? |
a. init
b. pack c. applet d. setVisible | a |
| MouseEvent类的哪个方法返回鼠标事件生成时鼠标光标的X坐标? |
a. getXCoord
b. getMouseX c. getPosition d. getX | d |
| 如果一个类实现了一个指定多个方法的标准API接口,但不需要其中很多方法,应该使用什么代替该接口? |
a. 自己详细实现所需的方法
b. 适配器类 c. 不同的接口 d. 没有其他选择 | b |
| Timer对象的事件时间间隔以什么单位指定? |
a. 秒
b. 微秒 c. 毫秒 d. 分钟 | c |
Timer类的哪个方法在Timer对象运行时返回
true
?
|
a. isRunning
b. addActionListener c. start d. getDelay | a |
| Applet类的哪个方法返回调用Applet的HTML文件位置的URL对象? |
a. getHTMLlocation
b. getDocumentBase c. getAppletBase d. getCodeBase | b |
Applet类的哪个方法返回Applet的
.class
文件位置的URL对象?
|
a. getHTMLlocation
b. getDocumentBase c. getAppletBase d. getCodeBase | d |
1.2 判断题
-
一个Applet类继承自
JApplet,而JApplet类是javax.swing包的一部分。(True) - 超文本可以包含指向同一网页中其他位置的链接。(True)
- Applets不能与除传输它的服务器之外的任何系统建立网络连接。(True)
- Applets可以检索有关用户系统或用户身份的信息。(False)
-
<h1/>标签用于标记文档的头部部分。(False) -
使用静态
main方法来创建Applet类的实例。(False) -
在扩展
JApplet的类中,将组件添加到内容面板。(True) - 在Applet中,事件处理方式与GUI应用不同。(False)
-
Frame类的对象没有内容面板。(True) -
在重写的
paint方法中,不应调用超类的paint方法。(False) -
一旦
Timer对象启动,不关闭程序就无法停止。(False) -
Applet类的
play方法加载并播放音频文件一次,然后释放其占用的内存以进行垃圾回收。(True) -
用于音频文件的
loop和stop方法是Applet类的一部分。(False)
1.3 错误查找
以下是一些代码中的错误及修正建议:
// 错误代码1
<applet code="MyApplet.java" width=100 height=50>
</applet>
// 错误原因:code属性应指定编译后的.class文件,而不是.java文件
// 修正后
<applet code="MyApplet.class" width=100 height=50>
</applet>
// 错误代码2
public void paint(Graphics g)
{
drawLine(0, 0, 100, 100);
}
// 错误原因:未指定drawLine方法所属的对象,应使用g.drawLine
// 修正后
public void paint(Graphics g)
{
g.drawLine(0, 0, 100, 100);
}
// 错误代码3
// Call a method to draw a filled polygon
fillPolygon(xCoords, yCoords,);
// 错误原因:方法调用中多余的逗号,且未指定方法所属的对象
// 修正后
g.fillPolygon(xCoords, yCoords);
// 错误代码4
public class MyPanel extends JPanel
{
public MyPanel()
{
// Constructor code...
}
public void paint(Graphics g)
{
//paint method code...
{
}
// 错误原因:方法结束处的括号不匹配
// 修正后
public class MyPanel extends JPanel
{
public MyPanel()
{
// Constructor code...
}
public void paint(Graphics g)
{
//paint method code...
}
}
// 错误代码5
private class MyMouseListener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
mouseClicks += 1;
}
}
// 错误原因:实现MouseListener接口时,未为所有方法提供定义
// 修正后
private class MyMouseListener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
mouseClicks += 1;
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
// 错误代码6
// Is there any statement missing in order to initialize //the timer object?
public void init()
{
timer = new Timer(40, new TimerListener());
}
// 错误原因:创建Timer对象后未启动
// 修正后
public void init()
{
timer = new Timer(40, new TimerListener());
timer.start();
}
1.4 算法工作台
-
创建HTML标签
:要显示文本“Games”并加粗斜体,可以使用
<b><i>Games</i></b>标签。 -
执行Applet的HTML标签
:假设Applet代码保存在
MyApplet.java文件中,编译后的代码与HTML文档在同一目录下,可使用以下标签执行Applet:
<applet code="MyApplet.class" width=300 height=200>
</applet>
- 将GUI应用转换为Applet :以下是将一个简单的GUI应用转换为Applet的步骤及代码示例。
// 原GUI应用类
public class SimpleWindow extends JFrame
{
public SimpleWindow()
{
// Set the title.
setTitle("A Simple Window");
// Specify what happens when the close button is clicked.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Add a label.
JLabel label = new JLabel("This is a simple window.");
add(label);
// Pack and display the window.
pack();
setVisible(true);
}
}
// 转换为Applet后的代码
import javax.swing.*;
import java.awt.*;
public class SimpleApplet extends JApplet
{
public void init()
{
// Set the title. (Applet没有标题设置,可忽略)
// 不需要设置关闭操作
// Add a label.
JLabel label = new JLabel("This is a simple applet.");
getContentPane().add(label);
// 不需要pack和setVisible
}
}
-
Graphics对象绘图代码
:假设
g引用一个Graphics对象,以下是实现各种绘图操作的代码。
// a. 绘制一个宽100像素、高200像素的矩形轮廓,左上角坐标为(50, 75)
g.drawRect(50, 75, 100, 200);
// b. 绘制一个宽300像素、高100像素的填充矩形,左上角坐标为(10, 90)
g.setColor(Color.BLACK);
g.fillRect(10, 90, 300, 100);
// c. 绘制一个蓝色椭圆轮廓,其包围矩形宽100像素、高50像素,左上角坐标为(10, 25)
g.setColor(Color.BLUE);
g.drawOval(10, 25, 100, 50);
// d. 绘制一条从(0, 5)到(150, 175)的红色线条
g.setColor(Color.RED);
g.drawLine(0, 5, 150, 175);
// e. 绘制字符串“Greetings Earthling”,字符串左下角点坐标为(80, 99),使用加粗20点的 serif 字体
g.setFont(new Font("Serif", Font.BOLD, 20));
g.drawString("Greetings Earthling", 80, 99);
// f. 绘制一个多边形,顶点坐标为(10, 10)、(10, 25)、(50, 25)和(50, 10)
int[] xCoords = {10, 10, 50, 50};
int[] yCoords = {10, 25, 25, 10};
g.drawPolygon(xCoords, yCoords, 4);
// 该代码绘制的是一个矩形
- 使用适配器类重写鼠标移动监听器 :
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
private class MyMouseMotionListener extends MouseAdapter
{
@Override
public void mouseMoved(MouseEvent e)
{
mouseMovements += 1;
}
}
-
创建并注册
Timer对象 :
import javax.swing.Timer;
// 假设类中有一个内部类MyTimerListener
private class MyTimerListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
// 处理事件
}
}
// 创建并注册Timer对象
Timer timer = new Timer(500, new MyTimerListener());
timer.start();
2. JavaFX基础
JavaFX是Java的下一代GUI工具包,可用于创建丰富的图形化应用程序。下面我们来了解JavaFX的相关知识。
2.1 JavaFX简介
JavaFX是一个标准的Java库,从Java 7开始完全集成到Java中。它可用于创建GUI应用程序、显示2D和3D图形,能开发运行在本地计算机的独立图形应用程序、从远程服务器运行的应用程序或嵌入网页的应用程序。
与Swing相比,JavaFX是Java库中相对较新的部分,虽然它不会取代Swing,但代表了Java GUI工具包的下一代发展方向。
GUI是应用程序呈现给用户进行交互的图形窗口或图形窗口系统,除了接受键盘输入外,通常还接受鼠标或触摸屏输入。
常见的GUI组件包括按钮(
Button
)、标签(
Label
)、文本框(
TextField
)、复选框(
CheckBox
)和单选按钮(
RadioButton
)等。
以下是一些常见GUI组件的说明:
|组件|描述|
| ---- | ---- |
|
AnchorPane
|其他组件的容器,内部组件可固定在距
AnchorPane
一个或多个边缘的特定距离处。|
|
Button
|点击时可触发操作的按钮。|
|
CheckBox
|有一个可勾选或取消勾选的框的组件。|
|
ComboBox
|显示下拉列表供用户选择项目的组件,还提供一个文本框供用户输入,兼具列表和文本框的功能。|
|
Label
|可显示文本的区域。|
|
List
|用户可从中选择项目的列表。|
|
RadioButton
|可选中或取消选中的组件,通常成组出现,允许用户从多个选项中选择一个。|
|
Slider
|用户可通过沿轨道移动滑块来选择值的组件。|
|
TextField
|用户可从键盘输入单行文本的区域。|
|
TitledPane
|其他组件的容器,顶部有一个标题栏可显示标题,可关闭或打开。|
2.2 场景图(Scene Graphs)
在JavaFX中,GUI中的组件通过场景图进行组织。场景图是一种树状的层次数据结构,包含节点。
场景图有三种类型的节点:
-
根节点(Root Node)
:场景图中只能有一个根节点,它是场景图中所有其他节点的父节点,是结构中的第一个节点。
-
分支节点(Branch Node)
:可以有其他节点作为子节点的节点。
-
叶子节点(Leaf Node)
:不能有子节点的节点。
在JavaFX中,能有子节点的节点是容器,可容纳其他组件。
AnchorPane
容器常被用作GUI的根节点。
例如,一个简单的GUI可能包含一个
AnchorPane
作为根节点,其中包含一个
Pane
(分支节点)和一个
Button
(叶子节点),而
Pane
中又包含一个
Label
和两个
RadioButton
(叶子节点)。
以下是一个简单的场景图示例:
graph TD
A[AnchorPane(根节点)] --> B[Pane(分支节点)]
A --> C[Button(叶子节点)]
B --> D[Label(叶子节点)]
B --> E[RadioButton(叶子节点)]
B --> F[RadioButton(叶子节点)]
在更复杂的GUI中,可能有一个
AnchorPane
作为根节点,包含一个
TitledPane
(分支节点)和一个
Button
(叶子节点),
TitledPane
中又包含另一个
AnchorPane
(分支节点),该
AnchorPane
中包含三个
RadioButton
(叶子节点)。
graph TD
A[AnchorPane(根节点)] --> B[TitledPane(分支节点)]
A --> C[Button(叶子节点)]
B --> D[AnchorPane(分支节点)]
D --> E[RadioButton(叶子节点)]
D --> F[RadioButton(叶子节点)]
D --> G[RadioButton(叶子节点)]
2.3 事件驱动编程
在GUI环境中运行的程序必须是事件驱动的。事件是程序中发生的动作,如按钮点击。编写GUI应用程序的一部分工作是创建事件监听器,事件监听器是在特定事件发生时自动执行的方法。
例如,当用户点击按钮时,可创建一个事件监听器来响应这个点击事件,执行相应的操作。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloWorld extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(e -> System.out.println("Hello World!"));
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
在上述代码中,当用户点击按钮时,会触发
setOnAction
方法中定义的事件监听器,在控制台输出“Hello World!”。
通过以上内容,我们对Java Applets和JavaFX的基础知识有了较为全面的了解。无论是Applets的音频播放、方法使用,还是JavaFX的场景图组织和事件驱动编程,都是开发Java图形化应用的重要内容。希望这些知识能帮助你更好地进行Java应用开发。
3. JavaFX应用开发实践
3.1 使用Scene Builder创建JavaFX应用
Scene Builder是一个可视化的工具,可帮助我们更轻松地创建JavaFX应用的界面。以下是使用Scene Builder创建JavaFX应用的基本步骤:
1.
安装Scene Builder
:从官方网站下载并安装Scene Builder。
2.
创建FXML文件
:FXML是一种基于XML的标记语言,用于定义JavaFX应用的用户界面。在Scene Builder中创建一个新的FXML文件。
3.
设计界面
:从组件库中拖放所需的组件到设计区域,如按钮、标签、文本框等,并进行布局调整。
4.
设置组件属性
:通过属性面板设置组件的各种属性,如文本内容、大小、颜色等。
5.
保存FXML文件
:将设计好的界面保存为FXML文件。
以下是一个简单的FXML文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" alignment="CENTER" spacing="20">
<Label text="Welcome to JavaFX!" />
<Button text="Click Me" />
</VBox>
3.2 编写应用代码
在创建好FXML文件后,需要编写Java代码来加载和显示这个界面。以下是一个简单的Java代码示例:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class JavaFXApp extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
// 加载FXML文件
FXMLLoader fxmlLoader = new FXMLLoader(JavaFXApp.class.getResource("example.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 300, 200);
// 设置舞台标题
primaryStage.setTitle("JavaFX App");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
在上述代码中,首先使用
FXMLLoader
加载FXML文件,然后创建一个
Scene
对象,并将其设置到
Stage
上,最后显示舞台。
3.3 处理事件
在JavaFX应用中,处理事件是非常重要的。以下是一个处理按钮点击事件的示例:
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import java.io.IOException;
public class EventHandlingApp extends Application {
@FXML
private Label messageLabel;
@FXML
private Button clickButton;
@Override
public void start(Stage primaryStage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(EventHandlingApp.class.getResource("event_example.fxml"));
fxmlLoader.setController(this);
Scene scene = new Scene(fxmlLoader.load(), 300, 200);
primaryStage.setTitle("Event Handling App");
primaryStage.setScene(scene);
primaryStage.show();
}
@FXML
private void handleButtonClick() {
messageLabel.setText("Button clicked!");
}
public static void main(String[] args) {
launch(args);
}
}
在上述代码中,使用
@FXML
注解将FXML文件中的组件注入到Java代码中,然后在
handleButtonClick
方法中处理按钮点击事件,当按钮被点击时,更新标签的文本内容。
4. 综合案例:开发一个简单的计算器应用
下面我们通过一个综合案例,开发一个简单的计算器应用,来巩固前面所学的知识。
4.1 设计界面
使用Scene Builder设计计算器的界面,包含数字按钮、运算符按钮、显示结果的文本框等。以下是对应的FXML文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.GridPane?>
<GridPane xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" alignment="CENTER" hgap="10" vgap="10">
<TextField fx:id="resultField" GridPane.columnIndex="0" GridPane.columnSpan="4" GridPane.rowIndex="0" editable="false" />
<Button text="7" GridPane.columnIndex="0" GridPane.rowIndex="1" onAction="#handleNumberClick" />
<Button text="8" GridPane.columnIndex="1" GridPane.rowIndex="1" onAction="#handleNumberClick" />
<Button text="9" GridPane.columnIndex="2" GridPane.rowIndex="1" onAction="#handleNumberClick" />
<Button text="/" GridPane.columnIndex="3" GridPane.rowIndex="1" onAction="#handleOperatorClick" />
<Button text="4" GridPane.columnIndex="0" GridPane.rowIndex="2" onAction="#handleNumberClick" />
<Button text="5" GridPane.columnIndex="1" GridPane.rowIndex="2" onAction="#handleNumberClick" />
<Button text="6" GridPane.columnIndex="2" GridPane.rowIndex="2" onAction="#handleNumberClick" />
<Button text="*" GridPane.columnIndex="3" GridPane.rowIndex="2" onAction="#handleOperatorClick" />
<Button text="1" GridPane.columnIndex="0" GridPane.rowIndex="3" onAction="#handleNumberClick" />
<Button text="2" GridPane.columnIndex="1" GridPane.rowIndex="3" onAction="#handleNumberClick" />
<Button text="3" GridPane.columnIndex="2" GridPane.rowIndex="3" onAction="#handleNumberClick" />
<Button text="-" GridPane.columnIndex="3" GridPane.rowIndex="3" onAction="#handleOperatorClick" />
<Button text="0" GridPane.columnIndex="0" GridPane.rowIndex="4" onAction="#handleNumberClick" />
<Button text="." GridPane.columnIndex="1" GridPane.rowIndex="4" onAction="#handleNumberClick" />
<Button text="=" GridPane.columnIndex="2" GridPane.rowIndex="4" onAction="#handleEqualsClick" />
<Button text="+" GridPane.columnIndex="3" GridPane.rowIndex="4" onAction="#handleOperatorClick" />
</GridPane>
4.2 编写控制器代码
创建一个控制器类来处理按钮点击事件和计算逻辑。
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import java.util.Stack;
public class CalculatorController {
@FXML
private TextField resultField;
private Stack<Double> numbers = new Stack<>();
private Stack<Character> operators = new Stack<>();
@FXML
private void handleNumberClick(javafx.event.ActionEvent event) {
Button source = (Button) event.getSource();
String number = source.getText();
resultField.setText(resultField.getText() + number);
}
@FXML
private void handleOperatorClick(javafx.event.ActionEvent event) {
Button source = (Button) event.getSource();
char operator = source.getText().charAt(0);
// 处理运算符逻辑
// 这里可以添加具体的运算符处理代码
}
@FXML
private void handleEqualsClick(javafx.event.ActionEvent event) {
// 处理等于号逻辑
// 这里可以添加具体的计算逻辑
}
}
4.3 加载界面和控制器
编写主类来加载FXML文件和控制器。
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class CalculatorApp extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(CalculatorApp.class.getResource("calculator.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 300, 400);
primaryStage.setTitle("Calculator App");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
5. 总结
通过以上内容,我们系统地学习了Java Applets和JavaFX的相关知识。
对于Java Applets,我们了解了其音频播放的方法,掌握了Applet类的重要方法,如
init
、
getDocumentBase
和
getCodeBase
等。同时,也学习了如何避免开发过程中的常见错误,通过练习题和算法工作台的实践,巩固了Applets开发的知识。
对于JavaFX,我们从基础概念入手,了解了JavaFX的特点和优势,学习了场景图的组织方式和事件驱动编程的原理。通过使用Scene Builder创建界面、编写应用代码和处理事件,掌握了JavaFX应用开发的基本流程。最后,通过开发一个简单的计算器应用,将所学知识进行了综合应用。
在实际开发中,我们可以根据项目的需求选择合适的技术。如果需要开发嵌入网页的小型交互程序,可以选择Java Applets;如果要创建功能丰富、界面美观的独立应用程序,JavaFX则是更好的选择。希望大家通过学习这些知识,能够在Java图形化应用开发的道路上取得更好的成果。
以下是一个简单的流程图,展示了JavaFX应用开发的基本流程:
graph LR
A[需求分析] --> B[设计界面]
B --> C[使用Scene Builder创建FXML文件]
C --> D[编写Java代码加载FXML文件]
D --> E[处理事件和业务逻辑]
E --> F[测试和优化]
同时,为了方便大家回顾,这里列出Java Applets和JavaFX的关键知识点对比:
| 对比项 | Java Applets | JavaFX |
| ---- | ---- | ---- |
| 应用场景 | 嵌入网页的小型交互程序 | 独立的GUI应用、2D/3D图形应用 |
| 音频播放 | 使用
play
方法或
AudioClip
对象 | 有专门的音频播放类 |
| 界面设计 | 代码编写为主 | 可使用Scene Builder可视化设计 |
| 事件处理 | 传统的事件监听器 | 基于lambda表达式的事件处理 |
| 组件 | 相对较少 | 丰富的组件库 |
超级会员免费看
51

被折叠的 条评论
为什么被折叠?



