2015-01-10 1 views
2

Я читал этот вопрос: Action Buttons css style in JavaFX ControlFX dialog, чтобы узнать, можно ли изменить диалоги предупреждения JavaFX с точки зрения стиля.Стилирование диалога из проекта JavaFX Openjfx Dialogs

Ответ был довольно хорошим, но мне было интересно, можно ли просто форматировать определенные слова в диалоговом окне?

Например, я хочу, чтобы одно слово было подчеркнуто, я не могу понять, как это сделать, потому что есть только один .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\";")); 
} 

ответ

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

+0

Это сработало! awesome :) спасибо, приятель! –

+0

Спасибо, тогда отметьте ответ как действительный, так что другие могут найти его полезным. –

Смежные вопросы