textflow setstyle font color javafx javafx-2

font - setstyle label javafx



Haga que la porciĆ³n de un texto sea negrita en una Etiqueta o Texto JavaFx (4)

En mi aplicación JavaFx necesito tener una palabra o dos en negrita en toda la oración. Actualmente, la oración se representa como una etiqueta JavaFx, pero el componente de actualización tampoco me permite configurar el texto para que las palabras "Muestra" se muestren en negrita.

String s = "This is a <b>Sample</b> sentence" Label label = new Label(s);

salida

This is a Sample sentence

JavaFx Text tampoco permite esto. ¿Hay algún componente donde pueda tener una parte del texto en negrita?

No estoy seguro de si JavaFx WebView es una buena idea para representar muchas oraciones pequeñas en una ventana.


Dado que las respuestas anteriores no incluían el código FXML, publicaré uno adicional.

Según lo sugerido por @Ernisto, puede usar un TextFlow que contenga partes de Text , donde cada parte se puede diseñar de forma diferente.

Ejemplo de contenido de archivo FXML :

<TextFlow> <Text text="Normal text and "/> <Text text="bold text and " style="-fx-font-weight: bold"/> <Text text="italic text and " style="-fx-font-style: italic"/> <Text text="red text." style="-fx-stroke: red"/> </TextFlow>

Salida :


Es posible usar el contenedor TextFlow de JavaFX8. Luego puede agregar fácilmente nodos de Text diferentes estilos dentro de él.

TextFlow flow = new TextFlow(); Text text1=new Text("Some Text"); text1.setStyle("-fx-font-weight: bold"); Text text2=new Text("Some Text"); text2.setStyle("-fx-font-weight: regular"); flow.getChildren().addAll(text1, text2);

El contenedor TextFlow automáticamente ajustará el contenido de los nodos de texto.


Actualización: JavaFX 8 proporciona un nuevo control para el texto enriquecido: TextFlow

Lamentablemente, no existe dicha función en 2.2, aunque puede incluirse en la próxima versión.

Por ahora puedes intentar usar los próximos enfoques:

  1. HBox con varios componentes Label o Text
  2. WebView
  3. Lienzo con varios componentes de texto dibujados

public class UtilsDialog { private static final String TAG = "UtilsDialog"; private static boolean sIsShowing = false; public static void showDialogShowError(String title, String msg, String defaultStyle, @Nullable String customStyle, String... styledWords) { if (sIsShowing) return; Stage dialogStage = new Stage(StageStyle.UTILITY); dialogStage.initModality(Modality.APPLICATION_MODAL); dialogStage.setWidth(400); dialogStage.setHeight(220); BorderPane borderPane = new BorderPane(); borderPane.setPadding(new Insets(15)); borderPane.setPrefWidth(Integer.MAX_VALUE); borderPane.setPrefHeight(Integer.MAX_VALUE); Scene scene = new Scene(borderPane); dialogStage.setScene(scene); sIsShowing = true; dialogStage.show(); UtilsGui.closeOnEsc(borderPane, scene); scene.addEventHandler(KeyEvent.KEY_PRESSED, t -> { if (t.getCode() == KeyCode.ESCAPE) { sIsShowing = false; } }); // Top Text textTitle = new Text(title); textTitle.setStyle("-fx-font-size: 18px;"); HBox hBoxTop = new HBox(10); hBoxTop.getChildren().addAll(textTitle); borderPane.setTop(hBoxTop); // Center TextFlow textFlow = new TextFlow(); List<String> words = Arrays.asList(msg.split(" ")); List<String> styledWordsList = Arrays.asList(styledWords); for (String word : words) { Text tmpWord = new Text(word); if (styledWordsList.contains(word .replace(".", "") .replace(",", "") .replace("?", "") .replace("!", "") .replace(";", "") .replace("/n", "") )) { tmpWord.setStyle(customStyle); } else { if (defaultStyle == null) { tmpWord.setStyle(""); } else { tmpWord.setStyle(defaultStyle); } } tmpWord.setText(tmpWord.getText()); textFlow.getChildren().add(tmpWord); textFlow.getChildren().add(new Text(" ")); } Text textMsg = new Text(msg); textMsg.setStyle("-fx-font-size: 14px;"); HBox hBoxInputPane = new HBox(10); hBoxInputPane.setAlignment(Pos.CENTER); VBox vBoxCenter = new VBox(10); vBoxCenter.setPadding(new Insets(25, 0, 15, 0)); vBoxCenter.getChildren().addAll(textFlow); borderPane.setCenter(vBoxCenter); JFXButton btnOk = new JFXButton("OK"); btnOk.setAlignment(Pos.CENTER_RIGHT); btnOk.setStyle("-fx-text-fill: WHITE; -fx-background-color: #5264AE; -fx-font-size: 14px;"); btnOk.setOnAction(event -> { sIsShowing = false; dialogStage.close(); }); // Bottom HBox hBoxBottom = new HBox(); final Pane spacer = new Pane(); HBox.setHgrow(spacer, Priority.ALWAYS); hBoxBottom.getChildren().addAll(spacer, btnOk); borderPane.setBottom(hBoxBottom); // store on close dialogStage.setOnCloseRequest(event -> sIsShowing = false); } }

llamada:

UtilsDialog.showDialogShowError("Test", "This is the message to show. Does it work?", null, "-fx-font-weight: bold", "This", "message", "show");