2016-08-18 5 views
0

テキストがすべてラベルの境界に収まらない場合は、JavaFXラベルのフォントのサイズを自動的に変更する必要があります。私はこれを行うにはいくつかの素晴らしいコード(ここではResize JavaFX Label if overrun)を見つけましたが、問題は、コードはフォントサイズと引数を取ることです。私は、アプリケーションがCSSを使ってフォントサイズを設定しているので、Label.getFont()はデフォルト設定を返します。私のCSSはフォントサイズを30に設定していますが、これまでLabelを調べる方法はすべてデフォルト設定の12を返しています。JavaFX Labelで適用されたフォントを検索する方法は?

私はそれを見てみましたが、それを探す。 Label.getStyle()は空の文字列を返します。 getCSSMetaData()は面白い設定をたくさん返します。私はそこでフォントを見つけてサブプロパティを見ることができましたが、フォントサイズ12と別のスタイル名のデフォルト値を保存しています。

これは私が私が私がフィードバックカードとフォントサイズを見つける必要がある知っている使用しています私のスタイルシートファイルから設定されています、マッピングは

._Feedback_Card { 
-fx-font-size: 30px; 
-fx-font-weight: bold; 
-fx-text-fill: rgba(0,0,0,.9); 
-fx-background-color: white; 
-fx-border-color: white; 
-fx-border-width: 0; 
-fx-alignment: center; 
-fx-text-alignment: center; 
-fx-font-family: Arial Unicode MS; 
-fx-effect: dropshadow(gaussian, #b4b4b4, 6,0,0,2); 
} 

名に振り回されてはいけませんがあります何らかの理由でこのコンポーネントをそのクラス名にマップするコード内の別の場所です。私は正確な仕組みを知らないので、それは同僚によって書かれています。しかし、与えられた名前は私がルートノード上の領域を探してみました:

Region node =  (Region)jsLayoutCollection.jsDisplayLayoutCollection.fGetFXParent().lookup("._Feedback_Card"); 
String sStream = node.getCssMetaData().stream() 

し、私は、フォントのプロパティのためのストリームを介して見えました。しかし、それは再びフォントを返しましたが、スタイルシートが設定する30ではなく、デフォルトの12です。

このプロパティはどこに適用されていますか、どのように見ますか?この情報を把握するのは簡単なはずですが、見つけられません。後でフォントを設定するのはとても簡単です:

Label.setStyle("-fx-font-size: " + fontSize + "px"); 

何か助けていただければ幸いです。

答えて

3

スタイルシートがラベルのシーン(または親)によって読み込まれ、CSSが適用されると、getFont()はCSSによって設定されたフォントを返します。

このコード:set-font.css

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class GetCSSFont extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Label label = new Label("Big label"); 
     StackPane root = new StackPane(label); 
     Scene scene = new Scene(root); 
     scene.getStylesheets().add("set-font.css"); 

     System.out.println("Default font: "+label.getFont()); 

     label.applyCss(); 

     System.out.println("Font from CSS: "+label.getFont()); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

Default font: Font[name=System Regular, family=System, style=Regular, size=13.0] 
Font from CSS: Font[name=Arial Unicode MS, family=Arial Unicode MS, style=Regular, size=30.0] 

(そして、あなたは、もちろん、double size = label.getFont().getSize()でポイントサイズを取得することができます。

.label { 
    /* Note the font family needs quoting if it has spaces: */ 
    -fx-font-family: 'Arial Unicode MS' ; 
    -fx-font-size: 30px ; 
    -fx-font-weight: bold ; 
} 

.root { 
    -fx-padding: 20 ; 
} 

は出力を生成します。 )

+1

ああ! applyCss関数がありませんでした。いったん私がそれを呼んだら、フォントはそのサイズに対して30を返しています。私はそれが何か単純なことを知っていた...ありがとう – Mark

関連する問題