JavaFXの中に同じテキストライン内の二つの異なるフォントサイズを持ってする方法はありますか?

ケレン・ミラー:

私は、Javaを使用してWindows-実行モバイル・コンセプト株式市場のゲームを作ってるんだ、それはJavaFXのライブラリだ、と私は(私の場合はUSDで)、プレイヤーの現在の残高の右下に通貨の形をしたいのですが。これでキャッチは、プレイヤーのバランスを保持している文字列も大きいことを意味し、プレイヤーがゲーム内千ドルの倍数を獲得するたびに、プレイヤーのバランスが大きくなるということです。これは、アプリケーション内の文字列「USD」の固定位置は、プレイヤーの現在のバランスで重なるようになります。

私は単純に「USD」のシンボルを移動するためのプログラムを強制しようとした時はいつでも千の倍数によって数が増加。これは、しかし、非常に非効率ですし、私はこれを行うための簡単な方法があることを賭けて喜びました。

    double balance = 12313.00;

    DecimalFormat decimalFormat = new DecimalFormat("#,###");
    String numberAsString = decimalFormat.format(balance);

    Text balanceText = new Text("$" + (numberAsString));
    balanceText.setFont(Font.font("Modernist", 72));
    balanceText.setFill(Color.web("77e6b3"));
    balanceText.setLayoutX(25);
    balanceText.setLayoutY(250);

    Text currencyText = new Text("USD");
    currencyText.setFont(Font.font("Modernist", 36));
    currencyText.setFill(Color.web("77e6b3"));
    currencyText.setLayoutX(275);
    currencyText.setLayoutY(250);
jewelsea:

あなたは使用することができるのTextFlowを複数のフォント、サイズ、スタイルや色の豊富なテキストをレンダリングします:

お金

サンプルコード

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.*;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

import java.text.DecimalFormat;

public class MoMoney extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        double balance = 12313.00;

        DecimalFormat decimalFormat = new DecimalFormat("#,###");
        String numberAsString = decimalFormat.format(balance);

        Text balanceText = new Text("$" + (numberAsString));
        balanceText.setFont(Font.font("Modernist", 72));
        balanceText.setFill(Color.web("77e6b3"));

        Text currencyText = new Text("USD");
        currencyText.setTextOrigin(VPos.TOP);
        currencyText.setFont(Font.font("Modernist", 36));
        currencyText.setFill(Color.web("77e6b3"));

        TextFlow flow = new TextFlow(balanceText, currencyText);
        flow.setMinSize(TextFlow.USE_PREF_SIZE, TextFlow.USE_PREF_SIZE);

        VBox layout = new VBox(flow);
        layout.setPadding(new Insets(10));

        stage.setScene(new Scene(layout));
        stage.getScene().setFill(Color.rgb(35, 39, 50));
        stage.show();
    }

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

JavaDocの説明

JavaDocからのTextFlowの説明は上記のリンク:

TextFlowは、リッチテキストをレイアウトするために設計された特別なレイアウトです。単一のテキストフロー内のいくつかのテキストノードをレイアウトするために使用することができます。TextFlowテキストとの各テキストノード内部のフォントを使用して加え、それ自身の幅とそれぞれの子の位置を決定するために、テキストの配置。

実装のコメント

すべてのテキストを描画するのに十分なスペースがない場合、私はそれを防ぐために、その推奨サイズにのTextFlowの最小サイズを設定するので、デフォルトでのTextFlowは、新しい行にテキストを折り返されます。

TextFlowただし、のTextFlowは上付き値を生成するために、例えば、垂直に整列テキストにどのような方法を持っていない等正当化、例えば左ALIGN、ALIGN右などの標準的な幅基づくアライメント設定でテキストを整列させることができます。そのようなコピーのテキスト選択を作り、貼り付けたり、テキストの編集など他の制限もあります。だから、それを見て、それはあなたの目的に合ったならば、他の代替のメカニズムのいくつかは、下記を検討していない場合は、確認するためにそれを試してみてください。

代替アプローチ

これを行うには、他の有効な方法があります。

  1. (:ゼファーの答えとこれに関連する問題のようにコントロールレイアウトに制約をレイアウトコンテナを使用してJavaFXのテキスト、マルチワード色付け)。
  2. 埋め込みWebViewのは、 CSSフォーマットされたHTMLをレンダリングします。
  3. 同様に、サードパーティ製のlibが使用RichTextFX

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=317396&siteId=1