Javafx 8, построитель сцен 2 и controlfx с потрясающим шрифтом?

Я относительно новичок в javafx и недавно начал проект с использованием java 8 и javafx. Я использую Scenebuilder 2.0 для создания пользовательского интерфейса javafx. Мне было интересно, удалось ли кому-нибудь использовать 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;
}

person Runar Halse    schedule 22.07.2014    source источник


Ответы (2)


Вам потребуется создать для него пользовательский компонент.< /сильный>

Тогда вы сможете загрузить его туда (но все еще не сможете увидеть там глиф) и сможете установить глифы проще:

Код доступен по сути

Main.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);
    }
}

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;
    }
}

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"/>

PS: я знаю, что это, вероятно, не совсем то, что вы ищете, но конструктор сцен все еще очень ограничен.

PS2: вы также можете создать собственный компонент, используя значки Font Awesome и реализовать затем в Pane ( AnchorPane, Pane, HBox) с ImageView и Label.

person Mansueli    schedule 22.07.2014
comment
Я подумал, что конструктор сцен несколько ограничен, но это действительно будет гораздо более простой способ загрузки иконок! Спасибо! - person Runar Halse; 23.07.2014

Вы можете использовать FontAwesomeFX 8.1, у которого есть простой способ сделать это.

С ControlsFx вам нужно отредактировать файл fxml. (дополнительная информация)

<?import org.controlsfx.glyphfont.*?>
//...
<Label>
    <graphic>
        <Glyph fontFamily="FontAwesome" icon="PLUS" />
    </graphic>
</Label>
//...
person EFernandes    schedule 25.02.2015
comment
Это лучший, более современный ответ. Принятый ответ больше не нужен. - person metasim; 15.07.2015
comment
Хорошо, и чтобы быть полным, ей нужно добавить код, если вы хотите, чтобы шрифт был доступен в автономном режиме (без CDN, и вам нужно добавить файл ttf в свой ресурс): GlyphFontRegistry.register(new FontAwesome(getClass(). getResourceAsStream(/fonts/fontawesome-webfont.ttf))); - person pdem; 07.04.2016
comment
Найди это. В ответе @pdem \u200c\u200b есть некоторый мусор юникода. Не копируйте имя файла. - person enzo; 31.10.2016
comment
EFernandes Я использую этот код с ControlsFX 8.40, и он не работает :( Точно так же. Когда я загружаю FXML в SceneBuilder, он ничего не показывает. - person GOXR3PLUS; 12.12.2016
comment
@ GOXR3PLUS вам нужно собрать и запустить вашу программу. - person EFernandes; 26.04.2017