在 IntelliJ 中使用 MaterialFX
Using MaterialFX in IntelliJ
我一直在尝试在 IntelliJ 中使用 MaterialFX(这是一个 JavaFX 设计库(如 jFoenix)),但我没有成功。我已经添加了所需的依赖项:
此外,我在模块中添加了 requires org.glavo.materialfx.adapter;
-info.java:
module org.example {
requires javafx.controls;
requires javafx.fxml;
requires com.jfoenix;
requires org.glavo.materialfx.adapter;
opens org.example to javafx.fxml;
exports org.example;
}
有谁知道我该如何使用这个库,因为作者并没有很好地解释如何使用。我想提一下,它在 Scene Builder 的最新版本中完美运行,所以我只是想知道为什么它在 IntelliJ 中不这样做。
使用Maven(或Gradle)进行依赖管理
您正在使用 Maven(至少 Idea 中的屏幕截图是这样,尽管它可能 Gradle 使用 Maven 存储库)。
您应该在 pom.xml
(或 build.gradle
)中将依赖项定义为 Maven 依赖项,然后将构建文件重新导入 Idea。
您不应该在 Idea 中手动设置库依赖项。
Idea和Maven会识别你有一个模块化的项目,当你在Maven中定义了依赖时,它们会自动将新的依赖模块放在modulepath中进行编译和执行。
可以通过搜索maven 存储库找到maven 工件:
依赖信息是:
<dependency>
<groupId>io.github.palexdev</groupId>
<artifactId>materialfx</artifactId>
<version>11.13.5</version>
</dependency>
MaterialsFX 的 module-info 需要 VirtualizedFX
。 VirtualizedFX 模块也需要在您的模块路径上。 MaterialsFX 的 pom.xml 文件包含对 io.github.palexdev:virtualizedfx:11.2.6
的依赖。因此,通过 Mavan 和 Idea 与 Java 平台模块系统的内置集成,您的构建和运行时将自动访问依赖模块。
需要正确的模块名称
库的模块名称不是 org.glavo.materialfx.adapter
,而是 MaterialFX
,因此您应该使用:
requires MaterialFX;
不是:
requires org.glavo.materialfx.adapter;
我建议您花一些时间学习构建工具和 Java 平台模块系统的教程。
示例应用程序
示例由 运行 想法 new JavaFX project wizard 创建,然后修改生成的项目。
pom.xml
除了对 MaterialFX 库具有依赖性之外,您还需要对 javafx-controls 和 javafx-fxml 都具有依赖性。
MaterialFX 在构建和运行时需要这两种传递方式(即使您不在应用程序中使用 fxml)。
MaterialFX pom.xml 没有 JavaFX 的显式依赖配置,因此您需要在项目 pom.xml 中定义这些依赖(您希望在无论如何确保您的应用程序使用特定的 JavaFX 版本)。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>material</artifactId>
<version>1.0-SNAPSHOT</version>
<name>material</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>18</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>18</version>
</dependency>
<dependency>
<groupId>io.github.palexdev</groupId>
<artifactId>materialfx</artifactId>
<version>11.13.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.9.0</version>
<configuration>
<source>18</source>
<target>18</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
module-info.java
module com.example.material {
requires MaterialFX;
exports com.example.material;
}
MaterialApplication.java
package com.example.material;
import io.github.palexdev.materialfx.controls.MFXButton;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class MaterialApplication extends Application {
@Override
public void start(Stage stage) {
stage.setScene(new Scene(new MFXButton("mfx")));
stage.show();
}
public static void main(String[] args) {
launch();
}
}
我一直在尝试在 IntelliJ 中使用 MaterialFX(这是一个 JavaFX 设计库(如 jFoenix)),但我没有成功。我已经添加了所需的依赖项:
此外,我在模块中添加了 requires org.glavo.materialfx.adapter;
-info.java:
module org.example {
requires javafx.controls;
requires javafx.fxml;
requires com.jfoenix;
requires org.glavo.materialfx.adapter;
opens org.example to javafx.fxml;
exports org.example;
}
有谁知道我该如何使用这个库,因为作者并没有很好地解释如何使用。我想提一下,它在 Scene Builder 的最新版本中完美运行,所以我只是想知道为什么它在 IntelliJ 中不这样做。
使用Maven(或Gradle)进行依赖管理
您正在使用 Maven(至少 Idea 中的屏幕截图是这样,尽管它可能 Gradle 使用 Maven 存储库)。
您应该在 pom.xml
(或 build.gradle
)中将依赖项定义为 Maven 依赖项,然后将构建文件重新导入 Idea。
您不应该在 Idea 中手动设置库依赖项。
Idea和Maven会识别你有一个模块化的项目,当你在Maven中定义了依赖时,它们会自动将新的依赖模块放在modulepath中进行编译和执行。
可以通过搜索maven 存储库找到maven 工件:
依赖信息是:
<dependency>
<groupId>io.github.palexdev</groupId>
<artifactId>materialfx</artifactId>
<version>11.13.5</version>
</dependency>
MaterialsFX 的 module-info 需要 VirtualizedFX
。 VirtualizedFX 模块也需要在您的模块路径上。 MaterialsFX 的 pom.xml 文件包含对 io.github.palexdev:virtualizedfx:11.2.6
的依赖。因此,通过 Mavan 和 Idea 与 Java 平台模块系统的内置集成,您的构建和运行时将自动访问依赖模块。
需要正确的模块名称
库的模块名称不是 org.glavo.materialfx.adapter
,而是 MaterialFX
,因此您应该使用:
requires MaterialFX;
不是:
requires org.glavo.materialfx.adapter;
我建议您花一些时间学习构建工具和 Java 平台模块系统的教程。
示例应用程序
示例由 运行 想法 new JavaFX project wizard 创建,然后修改生成的项目。
pom.xml
除了对 MaterialFX 库具有依赖性之外,您还需要对 javafx-controls 和 javafx-fxml 都具有依赖性。
MaterialFX 在构建和运行时需要这两种传递方式(即使您不在应用程序中使用 fxml)。
MaterialFX pom.xml 没有 JavaFX 的显式依赖配置,因此您需要在项目 pom.xml 中定义这些依赖(您希望在无论如何确保您的应用程序使用特定的 JavaFX 版本)。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>material</artifactId>
<version>1.0-SNAPSHOT</version>
<name>material</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>18</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>18</version>
</dependency>
<dependency>
<groupId>io.github.palexdev</groupId>
<artifactId>materialfx</artifactId>
<version>11.13.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.9.0</version>
<configuration>
<source>18</source>
<target>18</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
module-info.java
module com.example.material {
requires MaterialFX;
exports com.example.material;
}
MaterialApplication.java
package com.example.material;
import io.github.palexdev.materialfx.controls.MFXButton;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class MaterialApplication extends Application {
@Override
public void start(Stage stage) {
stage.setScene(new Scene(new MFXButton("mfx")));
stage.show();
}
public static void main(String[] args) {
launch();
}
}