【问题标题】:How to use font awesome in a fxml project (javafx)如何在 fxml 项目(javafx)中使用字体真棒
【发布时间】:2014-08-17 06:47:05
【问题描述】:

我想在我的项目中使用 font Awesome,但我不知道如何在我的项目中使用 font awesome。

我找到了一些例子,但它们不能在 fxml 中使用。

font awesome javafx

我需要帮助如何使用 fxml 在我的项目中使用它

谢谢。

【问题讨论】:

    标签: java javafx javafx-2 javafx-8 fxml


    【解决方案1】:

    我认为这就是您所需要的 ControlFX,其中包括超棒的字体支持。 有关更多信息,请参阅javadoc(但我测试了一天,效果很好)

    【讨论】:

      【解决方案2】:

      我通过改编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),工作就完成了:

      1. 导入:

        <?import de.jensd.fx.fontawesome.AwesomeIcon?>
        
      2. 节点:

        <Label styleClass="awesome"
               style="-fx-font-family: FontAwesome; -fx-font-size: 16.0;">
            <text><AwesomeIcon fx:constant="FILE"/></text>
        </Label>
        

      我最终实现了一个 Icon Widget/Control/Component 来恢复具有两个属性的代码量:

      1. 值: FA 图标名称;
      2. size:标签上样式-fx-font-size的样式属性。

      新代码(效果相同):

      <Icon value="FILE" size="16"/>
      

      可以在here 找到该控件的代码。您还可以找到一个工作示例,因为它包含字体和测试代码。

      【讨论】:

      • 我试过这个,但是得到了奇怪的符号而不是实际的图标。抱歉,我是 Java 和 JavaFx 的新手。另外,我使用的 FontAwesom 版本与您的代码“基于 Font-Awesome v4.1.0 的图标枚举”中指定的完全相同。
      • 也许你错过了一些步骤。我刚刚更新了代码来展示一个工作示例。
      • 谢谢,我会检查一下。此外,当我使用 '' SceneBuilder 不再打开我的 fxml 并引发错误。这正常吗?
      • 这已停止与 FontAwesome 版本 5 一起使用。希望对我的问题提供一些意见:stackoverflow.com/questions/59974248/…
      【解决方案3】:

      我将 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)

      FxIconics on GitHub

      【讨论】:

      • 在 JavaFX 中为学生项目创建一个应用程序,我安装了你的 jar,但是在使用 FxIconicsLabel 运行该行时我的程序崩溃了。我是否需要将某些内容移植到您的 github 页面之外,如果需要,该怎么做? JavaFX 的新手。
      • 原来我有 JDK 1.7,所以我更新到 1.8 并修复了问题。感谢您分享这个!
      【解决方案4】:

      如果你使用SceneBuilder,试试这个。

      • 首先,下载 'fontawesomefx'.
      • 其次,使用SceneBuilder的Jar/FXML管理器将jar导入SceneBuilder
      • 第三,库搜索FontAwesomeIconViewGlyphCheckBoxMaterialDesignIconViewMaterialIconViewWeatherIconView

      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中的图标?
      • 我发现有些版本不能很好地与 SceneBuilder 配合使用。您是否尝试过在 FXML 文件中进行编辑?
      • 是的,您需要在glyphName 中提供FontAwesomeIcon 名称,如下所示&lt;FontAwesomeIconView glyphName="CLOSE" glyphSize="24" /&gt; 它可以这样工作。
      【解决方案5】:

      您可以通过在 Scene Builder 中使用 .jar 文件来使用 fontawesomefx 库 你可以使用Fontawesome-fx Glyph browser浏览所有可用的图标

      【讨论】:

        【解决方案6】:

        正如@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>
        

        在场景构建器中如下所示:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-18
          • 2015-10-26
          • 1970-01-01
          • 2021-12-03
          • 2015-01-23
          • 2023-03-04
          • 2018-05-16
          • 1970-01-01
          相关资源
          最近更新 更多