Стандартный стиль кнопки диалога с JFoenix - PullRequest
1 голос
/ 24 марта 2019

Я делаю приложение javafx и использую библиотеку Jfoenix.

По этому коду открывается окно с конкретной информацией об элементе из таблицы:

@FXML
public void showEditPolicyDialog() {
    Policy selectedPolicy = policyTable.getSelectionModel().getSelectedItem();
    int selectedPolicyIndex = policyTable.getSelectionModel().getSelectedIndex();

    if (selectedPolicy == null) {
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("No Policy Selected");
        alert.setHeaderText(null);
        alert.setContentText("Please select Policy you want to edit.");
        alert.showAndWait();
        return;
    } else {
        selectedPolicy = Datasource.getInstance().getFullPolicyById(selectedPolicy.getId());
    }

    Dialog<ButtonType> dialog = new Dialog<>();

    dialog.initOwner(mainWindowAnchorPane.getScene().getWindow());
    dialog.setTitle("Edit policy " + selectedPolicy.getNumber());
    FXMLLoader fxmlLoader = new FXMLLoader();
    fxmlLoader.setLocation(getClass().getResource("/ee/insa/views/PolicyDialogLayout.fxml"));

    try {
        dialog.getDialogPane().setContent(fxmlLoader.load());

    } catch (IOException e) {
        System.out.println("Couldn't load edit policy dialog");
        e.printStackTrace();
        return;
    }

    dialog.getDialogPane().getButtonTypes().add(ButtonType.OK);
    dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);

    Button okButton = (Button) dialog.getDialogPane().lookupButton(ButtonType.OK);
    okButton.setDefaultButton(false);

    dialog.getDialogPane().getStylesheets().add("ee/insa/CSS/PolicyWindowCSS.css");

    PolicyController policyController = fxmlLoader.getController();
    Policy fullPolicy = Datasource.getInstance().getFullPolicyById(selectedPolicy.getId());
    policyController.loadPolicyDataToForm(fullPolicy);

    Optional<ButtonType> result = dialog.showAndWait();

    if (result.isPresent() && result.get() == ButtonType.OK) {
        policyController.updatePolicyData(fullPolicy);
        Datasource.getInstance().updatePolicy(fullPolicy);
        Policy updatedPolicyForMainTable = Datasource.getInstance().getPolicyForMainTableById(fullPolicy.getId());
        policyTable.getItems().set(selectedPolicyIndex, updatedPolicyForMainTable);
        policyTable.getSelectionModel().select(selectedPolicyIndex);
        if (inClientSearch == false) {
            checkTableView();
        }
    }
}

Как мне установить стиль кнопки диалога в JFoenix? Теперь кнопки имеют стандартный стиль Windows. enter image description here

В CSS я могу найти область, где находятся кнопки (розового цвета):

.dialog-pane > .button-bar > .container {
    -fx-background-color: deeppink;
}

Но я не могу точно найти эти 2 кнопки. Если я начну стиль по

.dialog-pane > .button {
     -fx-background-color: deeppink;
}

тогда ВСЕ кнопки будут рестайлинговыми.

ОБНОВЛЕНИЕ: Я пытался реализовать JFXDialog с помощью этого кода:

    @FXML
public void showEditPolicyDialog(){
    Policy selectedPolicy = policyTable.getSelectionModel().getSelectedItem();
    selectedPolicy = Datasource.getInstance().getFullPolicyById(selectedPolicy.getId());

    try {
        Parent parent = FXMLLoader.load(getClass().getResource("/ee/insa/views/PolicyDialogLayout.fxml"));
        JFXDialogLayout dialogLayout = new JFXDialogLayout();
        dialogLayout.setBody(parent);
        JFXDialog dialog = new JFXDialog( mainWindowStackPane, dialogLayout, JFXDialog.DialogTransition.BOTTOM);
        dialog.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

но проблема в том, что это не отдельное окно, оно отображается только в пространстве главного окна.

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Я нашел решение. Используя этот код

for(ButtonType bt : dialog.getDialogPane().getButtonTypes()){
        Button button = (Button) dialog.getDialogPane().lookupButton(bt);
        button.getStyleClass().add("dialogButton");
}

Я могу применить класс CSS только к этим 2 кнопкам.

.dialogButton {
-fx-background-color: -fx-primary;
-fx-text-fill: -fx-primatytext;
-fx-font-size: 12pt;
-fx-background-radius: 0;
-fx-border-width: 1px;
-fx-border-color: -fx-secondary;
}
.dialogButton:hover {
    -fx-background-color: -fx-secondary;
}

Теперь все выглядит хорошо. enter image description here

0 голосов
/ 24 марта 2019

Попробуйте использовать JFoenix JFXDialog вместо стандартного JavaFX `Диалог:

JFXDialog<ButtonType> dialog = new JFXDialog<>();
...