2015-10-26 5 views
3

Фактически искал везде, но любой ответ не может мне помочь, вот проблема: Я хочу добавить собственный шрифт к своим кнопкам. Я уже пытался написать класс css java и множество других решений, но ничего не помогло.JavaFX custom Fonts

/код удален/

Я был бы так рад, если кто-нибудь может мне помочь!

Update: Я попытался это:

package view; 
import ... 
public class SceneStyle { 

ImageView header = new ImageView("/view/images/header.jpg"); 
ImageView chatImg = new ImageView("/view/images/chat_win.jpg"); 

//Layout Style 
//public String font1 = "Impact"; 
//public String font2 = "Comic Sans MS"; 
public static String color1 = "#00adf0"; 
public static String color2 = "#0076a3"; 

public void setLabelStyle(Label label) { 
    label.setStyle("-fx-font-family: Inconsolata:700; -fx-font-size: 25"); 
    Scene scene = new Scene(label); 
    scene.getStylesheets().add("https://fonts.googleapis.com/css?family=Inconsolata:700"); 
    label.setTextFill(Color.GRAY); 
} 

public void setLabelStyle2(Label label){ 
    label.setStyle("-fx-font-family: Inconsolata:700; -fx-font-size: 25"); 
    Scene scene = new Scene(label); 
    scene.getStylesheets().add("https://fonts.googleapis.com/css?family=Inconsolata:700"); 
    label.setTextFill(Color.GRAY); 
} 

public void setLabelStyle3(Label label){ 
    label.setStyle("-fx-font-family: Inconsolata:700; -fx-font-size: 25"); 
    Scene scene = new Scene(label); 
    scene.getStylesheets().add("https://fonts.googleapis.com/css?family=Inconsolata:700"); 
    label.setTextFill(Color.RED); 
} 

public void setButtonStyle(Button button){ 
    button.setStyle("-fx-font-family: Inconsolata:700; -fx-font-size: 30; -fx-font-style: normal"); 
    Scene scene = new Scene(button); 
    scene.getStylesheets().add("https://fonts.googleapis.com/css?family=Inconsolata:700"); 
    button.setTextFill(Color.web(color2)); 
    button.setPrefWidth(190); 
} 

public void setBorderPaneStyle(BorderPane pane, VBox btnBox, HBox scoreBox){ 

    pane.setTop(header); 
    pane.setLeft(btnBox); 
    pane.setRight(chatImg); 
    pane.setBottom(scoreBox); 
    pane.getLeft().setStyle("-fx-background-image: url(\"/view/images/border_left.jpg\");"); 
    pane.getBottom().setStyle("-fx-background-image: url(\"/view/images/bottom.jpg\");"); 
    //pane.getCenter().setStyle("-fx-background-image: url(\"/view/images/center.jpg\");"); 
    //TODO: why can't I implement this? 
} 

public static String getFontColor1(){ return color1; } 
public static String getFontColor2(){ return color2; } 

Спасибо за подробные ответы, но на самом деле я не хочу, чтобы написать метод запуска, который будет переписан. Просто хочу реализовать шрифт в моем коде. И да, теперь я пытаюсь использовать Google Fonts. Спасибо, что ответили на мой вопрос.

+0

@ font-face не работает для меня каждый раз, когда я его пробовал. Вы должны загрузить шрифт через свой код с помощью Font.loadFont (...). И тогда вы можете использовать его над своим css. – Marcel

+0

Вы можете попробовать использовать этот [маленький пример] (https://github.com/TheItachiUchiha/FontLoad), который использует '@ font-face' для загрузки нового файла шрифта, а затем применяет его к элементам управления кнопками и ярлыками. – ItachiUchiha

+0

Существует [блог fxexperience об использовании размещенных в Google шрифтов] (http://fxexperience.com/2012/12/use-webgoogle-fonts-in-javafx/), определяемый с помощью CSS '@ font-face'. – jewelsea

ответ

0

Вот небольшой пример, показывающий, как загрузить и установить собственный шрифт.

package createfont; 

import java.io.IOException; 
import java.io.InputStream; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.text.Font; 
import javafx.stage.Stage; 

public class CustomFontTest extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     String currentFontFile = "English Gothic, 17th c..TTF"; 
     InputStream fontStream = CustomFontTest.class.getResourceAsStream(currentFontFile); 
     if (fontStream != null) { 
      Font bgFont = Font.loadFont(fontStream, 36); 
      fontStream.close(); 

      final Button button = new Button("Press me"); 
      button.setFont(bgFont); 

      BorderPane root = new BorderPane(); 
      root.setCenter(button); 

      Scene scene = new Scene(root, 500, 100); 

      primaryStage.setTitle("CustomFontTest"); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } else { 
      throw new IOException("Could not create font: " + currentFontFile); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

На самом деле не получается «English Gothic, 17th c..TFF»? потому что это не путь к файлу или правильное имя файла. – Viktoria

+1

Конечно нет. Мое предположение заключалось в том, что вы замените это на любые ваши собственные файлы шрифтов. – mipa

2

Вот простой пример использования пользовательских шрифтов в приложении JavaFX. Этот пример представляет собой только отредактированную версию образца FontLoad application.

Выход

enter image description here


Структура проекта

Последующий диаграмма структуры проекта.

enter image description here


Java Class

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class FontLoad extends Application { 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Label label = new Label("JavaFX Application"); 
     Button button = new Button("My Button"); 
     VBox box = new VBox(15, label, button); 
     box.setAlignment(Pos.CENTER); 
     Scene scene = new Scene(box, 500, 300); 
     scene.getStylesheets().add(getClass().getResource("/fontstyle.css").toExternalForm()); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

стилевых

@font-face { 
    font-family: 'Fleftex'; 
    src: url('fonts/Fleftex_M.ttf'); 
} 

.label { 
    -fx-font-family: 'Fleftex'; 
    -fx-font-size: 20; 
} 

.button .text { 
    -fx-font-family: 'Fleftex'; 
} 
0

Я попытался это:

public void setLabelStyle(Label label) { 
    label.setStyle("-fx-font-family: Inconsolata:700; -fx-font-size: 25"); 
    Scene scene = new Scene(label); 
    scene.getStylesheets().add("https://fonts.googleapis.com/css?family=Inconsolata:700"); 
    label.setTextFill(Color.GRAY); 

в каждом способе. Потому что я не хочу писать новый метод, который переопределяет метод запуска, как и выше. (На самом деле спасибо за этот подробный ответ, но это не то, что я ищу). Но также мое решение не работает ...

+0

Вы не должны переопределять 'start()' каждый раз. Вы делаете это один раз в классе, который расширяет приложение. Табличка стилей обычно добавляется только один раз к вашей сцене. – ItachiUchiha