📜  javafx 从资源中加载图像 - Java (1)

📅  最后修改于: 2023-12-03 15:31:35.993000             🧑  作者: Mango

JavaFX 从资源中加载图像

在 JavaFX 中,可以使用 Image 类加载图像。如果需要从资源中加载图像,可以使用以下方法。

1. 将图像文件放到 src 目录下

首先,将需要加载的图像文件放到项目的 src 目录下。例如,假设有一个 image.jpg 文件,可以将其放到 src 目录下。

2. 使用 getClass().getResource() 方法获取资源 URL

在 Java 中,可以使用 getClass().getResource() 方法获取资源的 URL。在 JavaFX 中,可以使用该方法获取资源的 URL,并将其转换为 String 类型。

String imageURL = getClass().getResource("image.jpg").toString();

该代码将返回 image.jpg 文件的 URL 作为 String 类型的变量 imageURL

3. 使用 Image 类加载图像

最后,使用 Image 类加载图像。可以使用 Image 类的两个构造函数:

  • Image(String url)
  • Image(InputStream is)

使用第一个构造函数,可以直接传入资源的 URL。例如:

Image image = new Image(imageURL);

使用第二个构造函数,需要先获取 InputStream,然后再传入 Image 构造函数。例如:

InputStream stream = getClass().getResourceAsStream("image.jpg");
Image image = new Image(stream);

注意,使用第二个构造函数时,需要注意资源文件必须在 src 目录下。

完整示例代码

以下是完整的示例代码。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.io.InputStream;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        // 获取资源 URL
        String imageURL = getClass().getResource("image.jpg").toString();

        // 使用 URL 加载图像
        Image image1 = new Image(imageURL);

        // 使用 InputStream 加载图像
        InputStream stream = getClass().getResourceAsStream("image.jpg");
        Image image2 = new Image(stream);

        // 创建 ImageView
        ImageView imageView1 = new ImageView(image1);
        ImageView imageView2 = new ImageView(image2);

        // 创建布局
        StackPane root = new StackPane();
        root.getChildren().addAll(imageView1, imageView2);

        // 创建场景
        Scene scene = new Scene(root, 400, 300);

        // 显示窗口
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

该代码将显示两个相同的图像,一个使用 URL 加载,一个使用 InputStream 加载。