相信很多朋友已经知道了orcale官方在java9之后,就将javafx从java中分离了出来。如果我们想在高版本中使用javafx,就必须自己引入javafx。那么,如何引入呢?
使用的软件:idea
第一步:打开idea,创建一个java项目(如SpringBoot)
第二步:下载对应版本的javafx的sdk
下载网址:JavaFX 21https://jdk.java.net/javafx21/
如果,你的版本是java17,那么可以将上面链接中的javafx21改为javafx17
然后选择你的操作系统,对应下载即可。
第三步:解压下载的javafx压缩包
解压后的文件夹可以放在D盘,如果C盘的内存吃紧。
我的路径:D:\code\javafx-sdk-21.0.2
第四步:在项目的pom.xml文件中导入相关依赖
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>21.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>21.0.1</version> <!-- 请使用适合你项目的版本 -->
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>21.0.1</version>
</dependency>
第五步:在项目结构中导入依赖
点击文件(file),选择项目结构(Project Structure)
选择模块(module)
点击依赖
点击+号,选择jar或目录
找到你下载后解压到的文件夹,并选择其中的lib包,并点击右下角的应用
选择库(library)
点击加号,选择java
找到你下载后解压到的文件夹,并选择其中的lib包
选择确定
最后,点击右下角的应用。
第六步:添加虚拟机选项
点击右上角的运行框选项的Ⅴ,并点击编辑配置
点击修改选项
点击添加虚拟机选项
在被指向的框框里,添加如下代码:
--module-path D:\code\javafx-sdk-21.0.2\lib --add-modules javafx.controls,javafx.fxml
添加选项后,点击下方的应用和确定
最后,编写一段代码进行测试:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class CameraExample extends Application {
@Override
public void start(Stage primaryStage) {
// 创建一个可观察的列表,用于存储摄像头设备名称
ObservableList<String> cameraOptions = FXCollections.observableArrayList();
// 尝试获取摄像头设备列表(这里假设已经有获取摄像头设备列表的方法)
// 例如,在Windows系统中可以使用一些本地库或者JavaCV来获取
// 这里为了简化示例,先假设有一个名为"Camera 1"的摄像头
cameraOptions.add("Camera 1");
// 创建一个下拉菜单,用于选择摄像头
ComboBox<String> cameraComboBox = new ComboBox<>(cameraOptions);
// 创建一个按钮,用于拍照
Button captureButton = new Button("Capture");
// 创建一个ImageView,用于显示拍摄的照片
ImageView imageView = new ImageView();
// 为拍照按钮添加事件处理器
captureButton.setOnAction(event -> {
try {
// 假设已经有一个方法可以从选定的摄像头获取图像
// 这里简化为创建一个空白的BufferedImage作为示例
BufferedImage bufferedImage = new BufferedImage(640, 480, BufferedImage.TYPE_INT_RGB);
// 将BufferedImage转换为JavaFX的Image对象
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
// 将图像设置到ImageView中显示
imageView.setImage(image);
} catch (Exception e) {
e.printStackTrace();
}
});
// 创建一个垂直布局容器,并将下拉菜单、拍照按钮和ImageView添加到容器中
VBox layout = new VBox(10);
layout.getChildren().addAll(cameraComboBox, captureButton, imageView);
// 创建一个场景,并将布局容器添加到场景中
Scene scene = new Scene(layout, 300, 300);
// 将场景设置到舞台上,并设置舞台标题
primaryStage.setScene(scene);
primaryStage.setTitle("Camera Application");
// 显示舞台
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
运行结果:
文章到此结束!