从JavaFX Openjfx Dialogs项目设置对话框样式

时间:2015-01-10 14:56:36

标签: java css javafx controlsfx

我正在阅读这个问题:Action Buttons css style in JavaFX ControlFX dialog,以确定是否可以在样式方面更改JavaFX警报对话框。

答案非常好,但我想知道是否可以在对话框中格式化某些单词?

例如,我只想要一个单词加下划线,但我无法弄清楚如何这样做,因为只有一个.content.label并且JavaFX Text类无法正常工作用对话框(如果我没错的话)。

以下是整个Alert对话框修改后的代码段。

@Override
public void start(Stage primaryStage) {
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Confirmation Dialog");
alert.setHeaderText("This is a Custom Confirmation Dialog");
alert.setContentText("We override the style classes of dialog.css");

Button button = new Button("Click to display an alert");
button.setOnAction(e->{
    Optional<ButtonType> result = alert.showAndWait();
    result.ifPresent(System.out::println);
});

Scene scene = new Scene(new StackPane(button), 300, 200);
primaryStage.setScene(scene);
primaryStage.show();

DialogPane dialogPane = alert.getDialogPane();

dialogPane.setStyle("-fx-background-color: greenyellow;");


dialogPane.getStyleClass().remove("alert");

GridPane grid = (GridPane)dialogPane.lookup(".header-panel"); 
grid.setStyle("-fx-background-color: cadetblue; "
        + "-fx-font-style: italic;");


StackPane stackPane = new StackPane(new ImageView(
        new Image(getClass().getResourceAsStream("lock24.png"))));
stackPane.setPrefSize(24, 24);
stackPane.setAlignment(Pos.CENTER);
dialogPane.setGraphic(stackPane);

dialogPane.lookup(".content.label").setStyle("-fx-font-size: 16px; "
        + "-fx-font-weight: bold; -fx-fill: blue;");

ButtonBar buttonBar = (ButtonBar)alert.getDialogPane().lookup(".button-bar");
buttonBar.setStyle("-fx-font-size: 24px;"
        + "-fx-background-color: indianred;");
buttonBar.getButtons().forEach(b->b.setStyle("-fx-font-family: \"Andalus\";"));
}

1 个答案:

答案 0 :(得分:4)

如果查看DialogPane课程,您会看到默认情况下它会使用Label作为内容。但你也有这个:

/**
 * Assign dialog content. Any Node can be used
 * 
 * @param content
 *            dialog's content
 */
public final void setContent(Node content) {
    this.content.setValue(content);
}

所以您需要做的就是为内容提供自定义节点:

Text text1=new Text("This is ");
text1.setStyle("-fx-font-size: 16px; -fx-fill: blue;");
Text text2=new Text("underlined ");
text2.setStyle("-fx-font-size: 16px; -fx-fill: blue; -fx-underline: true;");
Text text3=new Text("text");
text3.setStyle("-fx-font-size: 16px; -fx-fill: blue;");

TextFlow flow = new TextFlow(text1,text2,text3);

dialogPane.setContent(flow);

你会得到你的对话:

Dialog