Dans mon application JavaFx, il me faut un mot ou deux en gras dans la phrase. Actuellement, la phrase est rendue sous la forme d'une étiquette JavaFx, mais la mise à niveau du composant ne m'autorise pas non plus à définir le texte de manière à pouvoir afficher les mots "Exemple" en gras.
String s = "This is a <b>Sample</b> sentence"
Label label = new Label(s);
sortie
C'est un Échantillon phrase
JavaFx Text ne le permet pas non plus. Y a-t-il un composant où je peux avoir une partie du texte en gras?
Je ne suis pas sûr que JavaFx WebView soit une bonne idée pour le rendu de nombreuses petites phrases dans une fenêtre.
Il est possible d'utiliser le conteneur TextFlow
à partir de JavaFX8 . Vous pouvez ensuite facilement y ajouter des nœuds Text
de styles différents.
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);
Le conteneur TextFlow encapsulera automatiquement le contenu des nœuds de texte.
Update: JavaFX 8 fournit un nouveau contrôle pour le texte enrichi: TextFlow
Malheureusement, cette fonctionnalité n'existe pas dans la version 2.2, bien qu'elle puisse être incluse dans la prochaine version.
Pour l'instant, vous pouvez essayer d'utiliser les approches suivantes:
Label
ou Text
Etant donné que les réponses précédentes n'incluaient pas le code FXML, j'en publierai un supplémentaire.
Comme suggéré par @Ernisto, vous pouvez utiliser un TextFlow qui contient Text parts, où chaque partie peut être stylée différemment.
Exemple de contenu de fichier 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>
Sortie:
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);
}
}
appel:
UtilsDialog.showDialogShowError("Test", "This is the message to show. Does it work?",
null, "-fx-font-weight: bold", "This", "message", "show");