我一直在使用 ControlsFX 对话框来显示信息,但我的应用程序的样式不是蓝色的,并且与对话框样式(颜色、边框)不匹配,有没有办法更改按钮颜色或样式?

请您参考如下方法:

由于您没有提供您正在使用的版本,我将使用新的 OpenJFX-Dialogs 项目(source,自 8.20.7 开始 version),顺便说一句,它们与我们使用的对话框相同会用JDK8u40。

首先,让我们添加一些警告对话框:

@Override 
public void start(Stage primaryStage) { 
    Alert alert = new Alert(AlertType.CONFIRMATION); 
    alert.setTitle("Confirmation Dialog"); 
    alert.setHeaderText("This is a Regular Confirmation Dialog"); 
    alert.setContentText("This is the message"); 
 
    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 实例,它是对话框中的根节点,其中显示标题、内容和按钮。

通过查找或通过 getChildren() 很容易找到这些组件。

这是自定义对话框所有组件的示例:

@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(); 
// root 
    dialogPane.setStyle("-fx-background-color: greenyellow;"); 
 
// 1. Grid 
    // remove style to customize header 
    dialogPane.getStyleClass().remove("alert"); 
 
    GridPane grid = (GridPane)dialogPane.lookup(".header-panel");  
    grid.setStyle("-fx-background-color: cadetblue; " 
            + "-fx-font-style: italic;"); 
 
    // custom icon 
    StackPane stackPane = new StackPane(new ImageView( 
            new Image(getClass().getResourceAsStream("lock24.png")))); 
    stackPane.setPrefSize(24, 24); 
    stackPane.setAlignment(Pos.CENTER); 
    dialogPane.setGraphic(stackPane); 
 
// 2. ContentText with just a Label 
    dialogPane.lookup(".content.label").setStyle("-fx-font-size: 16px; " 
            + "-fx-font-weight: bold; -fx-fill: blue;"); 
 
// 3- ButtonBar 
    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\";")); 
 
} 

这是它的样子:


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!