¿Hay una manera de tener dos tamaños de fuentes diferentes dentro de la misma línea de texto en JavaFX?

Kellen Miller:

Estoy haciendo un juego de ventanas de gestión de móvil concepto de mercado de valores utilizando Java, y es bibliotecas JavaFX, y me gustaría tener la forma de moneda en la parte inferior derecha del saldo actual del jugador, (en mi caso USD) . El inconveniente de esto es, es que cada vez que el jugador gana un múltiplo de mil dólares en el juego, las cuentas del jugador se hace más grande, lo que significa que la cadena que mantiene el equilibrio del jugador es también más grande. Esto hace que la posición fija de la cadena "USD" en la aplicación que se ha superpuesto al saldo actual del jugador.

He intentado simplemente forzando el programa para mover el símbolo "USD" cada vez que el número se incrementa en un múltiplo de mil. Esto, sin embargo, parece altamente ineficiente y estoy dispuesto a apostar que hay una manera más sencilla de hacer esto.

    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:

Puede utilizar un TextFlow a representar el texto rico en fuentes múltiples, tamaños, estilos y colores:

dinero

Código de muestra

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();
    }
}

Descripción JavaDoc

Descripción de TextFlow desde el JavaDoc ligada arriba:

TextFlow es el diseño especial diseñado para disponer el texto rico. Se puede utilizar a la disposición de varios nodos de texto en un solo flujo de texto. El TextFlow utiliza el texto y la fuente de cada dentro de nodo de texto de que además de que propia anchura y alineación del texto para determinar la ubicación de cada niño.

Los comentarios de implementación

Por defecto, TextFlow se ajustará a las nuevas líneas de texto si no hay espacio suficiente para hacer que todo el texto, por lo que establecer el tamaño mínimo de la TextFlow a su tamaño preferido para evitarlo.

TextFlow puede alinear el texto con ajustes de alineación a base de anchura estándar tales como align izquierda, Alinear a la derecha, justificar etc. Sin embargo, TextFlow no tiene ninguna manera de texto verticalmente align, por ejemplo para generar un valor de exponente. También hay otras limitaciones, tales como hacer el seleccionable texto para copiar y pegar o editar texto. Así que busque en ella, y probarlo para ver si se ajusta a su finalidad, si no, considerar algunos de los otros mecanismos alternativos mencionan a continuación.

Aproximaciones alternativas

Otras formas válidas de hacer esto son:

  1. El uso de contenedores de diseño con restricciones para controlar la disposición (como en la respuesta de Zephyr y esta pregunta relacionada: JavaFX texto de varias palabras coloración ).
  2. La incorporación de un WebView para rendir CSS formato html.
  3. El uso de una tercera lib partido, como RichTextFX .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=317399&siteId=1
Recomendado
Clasificación