Javafx 8,scenebuilder 2和controlfx与fontawesome?

Run*_*lse 4 javafx java-8 scenebuilder

我对javafx比较陌生,最近开始使用java 8和javafx开发一个项目.我正在使用Scenebuilder 2.0来构建我的javafx ui.我想知道是否有人在scenebuilder中设法使用fontawesome?目前我需要这样做才能将图形添加到标签中

levelLabel1.setGraphic(create(FontAwesome.Glyph.CHEVRON_RIGHT));

public static Node create(Glyph glyph) {
    FontAwesome fontAwesome = new FontAwesome();
    fontAwesome.fontColor(color);

    Node result = fontAwesome.create(glyph.getChar());
    result.setScaleX(SCALE);
    result.setScaleY(SCALE);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

EFe*_*des 18

你可以使用FontAwesomeFX 8.1,它有一个简单的方法来做到这一点.

使用ControlsFx,您需要编辑fxml文件.(更多信息)

<?import org.controlsfx.glyphfont.*?>
//...
<Label>
    <graphic>
        <Glyph fontFamily="FontAwesome" icon="PLUS" />
    </graphic>
</Label>
//...
Run Code Online (Sandbox Code Playgroud)

  • 很好,并且要完整,如果您希望字体可以脱机使用(没有CDN,并且需要在您的资源中添加ttf文件),则需要添加一些代码:GlyphFontRegistry.register(new FontAwesome(getClass().的getResourceAsStream( "/字体/ fontawesome-webfont.ttf"))); (5认同)

Man*_*eli 3

您必须为其创建一个自定义组件。

然后您将能够在那里加载它(但仍然看不到那里的字形)并且能够更容易地设置字形:

代码可在要点上找到

主程序.java

import org.controlsfx.glyphfont.FontAwesome;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
       FALabel label = new FALabel();
       label.setGlyph(FontAwesome.Glyph.ANDROID);
       label.setValue("RoBOZUKU");
       Pane p = new Pane();
       p.getChildren().add(label);
       Scene scene = new Scene(p);
       primaryStage.setScene(scene);
       primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

FALabel.java

import org.controlsfx.glyphfont.FontAwesome;
import org.controlsfx.glyphfont.FontAwesome.Glyph;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;


public class FALabel extends Label{
    private Color color;
    private Glyph glyph;
    public void setValue(String text){
        this.setText(text);
        this.setGraphic(create(getGlyph()));
    }
    public FALabel() {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("FALabel.fxml"));
        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);
        try {
            fxmlLoader.load();
        } catch (Exception exception) {
            throw new RuntimeException(exception);
        }
    }
    public Node create(Glyph glyph) {
        FontAwesome fontAwesome = new FontAwesome();
        fontAwesome.fontColor(getColor());
        Node result = fontAwesome.create(glyph.getChar());
        result.setScaleX(this.getScaleX());
        result.setScaleY(this.getScaleY());
        return result;
    }
    public Color getColor() {
        return color;
    }


    public void setColor(Color color) {
        this.color = color;
    }
    public Glyph getGlyph() {
        return glyph;
    }
    public void setGlyph(Glyph fontAwesome) {
        this.glyph = fontAwesome;
    }
}
Run Code Online (Sandbox Code Playgroud)

FALabel.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<fx:root type="javafx.scene.control.Label" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"/>
Run Code Online (Sandbox Code Playgroud)

PS:我知道这可能不完全是您正在寻找的,但场景生成器仍然非常有限。

PS2:您还可以使用Font Awesome Icons创建自定义组件,然后在带有 ImageView 和 Label 的窗格(AnchorPane、Pane、HBox)中实现。