在JavaFX的CSS指定外部字体(Specifying external font in Java

2019-06-27 12:20发布

是否可以指定JavaFX应用程序使用CSS的字体? 我有一个FXML场景和对应的​​CSS文件。 在Java代码中,有可能使用指定的字体setFont方法:

text.setFont(Font.loadFont("file:resources/fonts/SourceSansPro-Bold.ttf", 12));

我尝试了不同的结构,如:

-fx-font-family: url("../fonts/SourceSansPro-Bold.ttf");

但是,这是行不通的。

Answer 1:

你是接近的解决方案:

-fx-font-family: 'Helvetica', Arial, sans-serif;

试试这个,它应该工作的罚款。


也许这可以帮助? (我不是在JavaFX的专家)

https://forums.oracle.com/forums/thread.jspa?messageID=10107625


编辑

装入字体:

@font-face {
    font-family: Delicious;
    src: url('Delicious-Roman.otf');
}

使用您的字体与-fx-

-fx-font-family: 'Delicious';


Answer 2:

我通过一个外部的字体使用的应用程序代码和CSS相结合的风格。

我放置loadFont的应用程序覆盖init()方法中调用,以确保任何事情之前多在应用程序发生时被调用。

Font.loadFont(CustomFontTest.class.getResource("TRON.TTF").toExternalForm(), 10);

要使用的字体,我的字体系列引用的字体在CSS:

.menu-bar {
    -fx-background-color: transparent;
    -fx-font-family: TRON;
    -fx-font-size: 40px;
}

.context-menu {
    -fx-font-family: TRON;
    -fx-background-color: transparent;
    -fx-font-size: 12px;
}

高兴的是,CSS大小的字体罚款。 即使字体大小在10加载,字体被正确地调整到什么是在CSS中指定-fx-font-size规格。

通过使用CSS标签的内嵌样式Font应用程序初始化期间还加载正常工作:

Label testControl = new Label("TRON");
testControl.setStyle("-fx-font-family: TRON; -fx-font-size: 120;");

所述TRON字体从dafont下载并通过构建系统放置在相同的目录中CustomFontTest类和复制到生成输出目录。

回答我的答案复制到一个论坛帖子上的“使用自定义字体” 。



Answer 3:

刚刚发现了一个细节:在JavaFX-8,如果你想拥有相同的字体的定期和大胆的变体可以用@字体面的两个实例指定它们。 然后你可以使用-fx的字体重量:大胆的;

@font-face {
    font-family: 'Droid Sans';
    src: url('DroidSans.ttf');
}

@font-face {
    font-family: 'Droid Sans Bold';
    src: url('DroidSans-Bold.ttf');
}

.root {
    -fx-font-family: 'Droid Sans'; 
}

.table-row-cell:focused .text {
    -fx-font-weight: bold;
}


Answer 4:

另一种方法是使用FileIUnputStream加载的字体,因此你不需要使用CSS:

 @FXML
    private Label myLabel;

@Override
    public void initialize(URL arg0, ResourceBundle arg1){

Font myFont = null;

        try {
            myFont = Font.loadFont(new FileInputStream(new File("patch_to_font.ttf")), 10);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        myLabel.setFont(myFont);

}


Answer 5:

CSS了JavaFx字体(进口.TTF):

/* import fonts */
@font-face {
    font-family: "Open Sans";
    font-style: normal;
    font-weight: 400;
    src: url("/fonts/OpenSans-Regular.ttf");
}
@font-face {
    font-family: "Open Sans Light";
    font-style: normal;
    font-weight: 300;
    src: url("/fonts/OpenSans-Light.ttf");
}
@font-face {
    font-family: "Open Sans Bold";
    font-style: normal;
    font-weight: 700;
    src: url("/fonts/OpenSans-Bold.ttf");
}
@font-face {
    font-family: "Open Sans ExtraBold";
    font-style: normal;
    font-weight: 900;
    src: url("/fonts/OpenSans-ExtraBold.ttf");
}

/* Set fonts */

.settings-name{
    -fx-font-size: 33px;
    -fx-font-family: "Open Sans Light";
    -fx-font-weight: 300;
    -fx-text-fill: #09f;
}

.settings-username{
    -fx-font-size: 19px;
    -fx-font-family: "Open Sans ExtraBold";
    -fx-font-weight: 900;
    -fx-text-fill: #09f;
}


文章来源: Specifying external font in JavaFX CSS
标签: css fonts javafx