2016-08-10 11 views
2

私が使用しているJavaFXコンポーネントは、Swingの対応製品とは異なり、一部のシステムフォントを適切にレンダリングしていないことに気付きました。この問題を示す完全な例を次に示します。JavaFXがすべてのシステムフォントを見つけられない

public class JavaFXApplication1 extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     // Swing button 
     SwingNode node = new SwingNode(); 
     SwingUtilities.invokeLater(() -> { 
      JButton swingButton = new JButton("Comic Sans MS"); 
      swingButton.setFont(new java.awt.Font("Comic Sans MS", java.awt.Font.PLAIN, 20)); 
      node.setContent(swingButton); 
     }); 

     // JavaFX button 
     Button fxButton = new Button("Comic Sans MS"); 
     fxButton.setFont(Font.font("Comic Sans MS", 20)); 

     HBox hbox = new HBox(); 
     hbox.getChildren().addAll(node, fxButton); 

     Scene scene = new Scene(hbox, 300, 250); 
     primaryStage.setTitle("Font test"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

システムにComic Sans MSフォントがある場合は、次の結果が表示されます。唯一のSwingコンポーネントは正常に見える:

Broken fonts

どうやらFXグラフィックスシステムが起動時にすべてのシステムフォントをロードしません。最も明白な解決策は、そのように、手動で不足しているものをロードすることです:

Font.loadFont(new FileInputStream(System.getenv("WINDIR")+"\\fonts\\"+"comic.ttf"), 20); 

今、すべてが正しくレンダリングが、このソリューションは、クロスプラットフォームではありませんし、私は本当にそれがアウト・オブ・ザ・動作することを期待したいですスイングと同じように何か不足していますか?そうでない場合、システムフォントのサブセットのみがJavaFX環境にロードされるのはなぜですか?

私は、Windows 10上で

+1

Windowsで問題を再現することができなかったため、少し不安でしたが、OSに固有のものかもしれません.Windows 7にはcomic-sxフォントが既に用意されています。 getFontNames()と利用可能なフォントを見て、awtと同様の方法でループ内にロードすることができます。http://www.java2s.com/Tutorial/Java/0261__2D-Graphics/Togetallavailablefontsinyoursystem.htm – D3181

+0

@ Dean219 - 私はWindows 10でそれを実行することに言及することを忘れていた。それはWindows 7で動作する場合、おそらくそれはOS固有のバグです。 – Dth

+0

それは他の人にはうまくいかないかもしれませんが、特定のシステムフォントを読み込むことができるので、問題の可能性があるすべてのフォントではなく、Windows 10に多種多様なフォントそれから、漫画サンは、それがロードするデフォルトフォントではないので、Windows 10で再現可能な問題かもしれませんが、フォントクラスを使用してどのフォントを使用できるかを印刷して、リストにあるかどうかを確認し、特にそれらを呼び出すことなく動作するリスト。 – D3181

答えて

0

を、それを実行しているよ、私は別のものを考え出した:これは奇妙なフォントサムシング(Iそのフォントである:私は、これは、例えば返す次のコード

String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailab‌​leFontFamilyNames(); for(String font: fonts) { System.out.printf("This is font %s %n", font); 

を作成ダウンロードしてインストールしています)。しかし、私はこのコードに入れます:

<GridPane fx:controller="sample.Controller" 
     xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10" 
     style="-fx-font-family: Something Strange"> 

テキストはまったく変更されません。たぶんこれはあなた/私たちの問題に貢献します。

+0

私の質問への答えではないので、私たちはあなたのコメントをコメントとして投稿するか、質問が既にリンクされているのでそのまま残しておくべきだと思います。 – Dth

+0

ああ、あなたはそれを知らなかったリンクすることができます。申し訳ありませんが、回答として投稿しました。まだstackoverflowに慣れています。 –

関連する問題