【发布时间】:2014-08-17 06:47:05
【问题描述】:
我想在我的项目中使用 font Awesome,但我不知道如何在我的项目中使用 font awesome。
我找到了一些例子,但它们不能在 fxml 中使用。
我需要帮助如何使用 fxml 在我的项目中使用它
谢谢。
【问题讨论】:
标签: java javafx javafx-2 javafx-8 fxml
我想在我的项目中使用 font Awesome,但我不知道如何在我的项目中使用 font awesome。
我找到了一些例子,但它们不能在 fxml 中使用。
我需要帮助如何使用 fxml 在我的项目中使用它
谢谢。
【问题讨论】:
标签: java javafx javafx-2 javafx-8 fxml
我通过改编Jens Deters's approach实现了使用FA Icons。
他的例程针对反对 fxml 的声明方式的动态 gui 组合。尽管如此,his AwesomeIcon enumeration(将 FA 可理解的名称映射到 unicode 字符)完全符合我的意图。
它应该首先在 main/app 类中静态加载字体:
public class App extends Application {
static {
Font.loadFont(App.class.getResource("/font/fontawesome-webfont.ttf").toExternalForm(), 10);
}
@Override
public void start(final Stage primaryStage) throws Exception {
URL resource = getClass().getResource("/fxml/app.fxml");
primaryStage.setScene(new Scene((Parent) FXMLLoader.load(resource), 500, 500));
primaryStage.setTitle("FontAwesomeFX demo");
primaryStage.show();
}
public static void main(String... args){
launch(args);
}
}
fxml中不能使用unicode字符(根据需要指定FA Icons),但可以动态设置属性值。因此有了上面提到的枚举(AwesomeIcon),工作就完成了:
导入:
<?import de.jensd.fx.fontawesome.AwesomeIcon?>
节点:
<Label styleClass="awesome"
style="-fx-font-family: FontAwesome; -fx-font-size: 16.0;">
<text><AwesomeIcon fx:constant="FILE"/></text>
</Label>
我最终实现了一个 Icon Widget/Control/Component 来恢复具有两个属性的代码量:
-fx-font-size的样式属性。新代码(效果相同):
<Icon value="FILE" size="16"/>
可以在here 找到该控件的代码。您还可以找到一个工作示例,因为它包含字体和测试代码。
【讨论】:
我将 Mike Penz 开发的 Android-Iconics 库移植到了 FX。很快就会有更新(文档也一样)..
showcase.jar 将为您提供图标的概览。
用法(需要 Java 1.8):
FxIconicsLabel labelTextDefault =
(FxIconicsLabel) new FxIconicsLabel.Builder(FxFontGoogleMaterial.Icons.gmd_folder_special)
.size(24)
.text("Right (default)")
.color(MaterialColor.ORANGE_500)
.build();
(或参见 DialogPlayGround.java)
【讨论】:
如果你使用SceneBuilder,试试这个。
SceneBuilder的Jar/FXML管理器将jar导入SceneBuilder。FontAwesomeIconView、GlyphCheckBox、MaterialDesignIconView、MaterialIconView或WeatherIconView
FXML 示例:
<?xml version="1.0" encoding="UTF-8"?>
<?import de.jensd.fx.glyphs.control.GlyphCheckBox?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<?import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIconView?>
<?import de.jensd.fx.glyphs.materialicons.MaterialIconView?>
<?import de.jensd.fx.glyphs.weathericons.WeatherIconView?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1">
<children>
<VBox maxHeight="-Infinity" maxWidth="-Infinity">
<children>
<Label text="FontAwesomeIconView">
<graphic>
<FontAwesomeIconView />
</graphic>
</Label>
<Label text="GlyphCheckBox">
<graphic>
<GlyphCheckBox />
</graphic>
</Label>
<Label text="MaterialDesignIconView">
<graphic>
<MaterialDesignIconView />
</graphic>
</Label>
<Label text="MaterialIconView">
<graphic>
<MaterialIconView />
</graphic>
</Label>
<Label text="WeatherIconView">
<graphic>
<WeatherIconView />
</graphic>
</Label>
</children>
</VBox>
</children>
</StackPane>
不要忘记将这些 jars 添加到项目的类路径中!
【讨论】:
FontAwsomeIconView中的图标?
FXML 文件中进行编辑?
glyphName 中提供FontAwesomeIcon 名称,如下所示<FontAwesomeIconView glyphName="CLOSE" glyphSize="24" /> 它可以这样工作。
您可以通过在 Scene Builder 中使用 .jar 文件来使用 fontawesomefx 库 你可以使用Fontawesome-fx Glyph browser浏览所有可用的图标
【讨论】:
正如@Sedrick 所说,您可以使用fontawesomefx 库并在FXML 中使用它,如下所示:
注意:JavaFX 8 和 FontAwesomeFx v8.9
dashboard.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane xmlns="http://javafx.com/javafx/8.0.121"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.example.DashboardController"
prefHeight="760" prefWidth="1080">
<Button text="Close" AnchorPane.topAnchor="0" AnchorPane.leftAnchor="0">
<graphic>
<FontAwesomeIconView glyphName="CLOSE" glyphSize="24"/>
</graphic>
</Button>
</AnchorPane>
【讨论】: