JavaFx: стиль динамического меню c - PullRequest
0 голосов
/ 11 марта 2020

У меня проблема с контекстными меню. Элементы в контекстном меню могут быть стилизованы, но они не работают динамически c. Я имею в виду, например, при инициализации я добавляю класс стилей к MenuItem и по событию удаляю его, но стиль все еще остается там. Как это можно решить?

Вот простой пример игры с ним:

Controller.java:

public class Controller implements Initializable {

    private static final String STYLED = "styled";
    @FXML
    private ListView<String> listView;
    @FXML
    private Button change;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        ContextMenu cm = new ContextMenu();

        MenuItem miAdd = new MenuItem("Add");
        miAdd.setOnAction(event -> listView.getItems().add("Apple"));

        MenuItem miRemove = new MenuItem("Remove");
        miRemove.disableProperty().bind(listView.getSelectionModel().selectedItemProperty().isNull());
        miRemove.setOnAction(event -> listView.getItems().remove(listView.getSelectionModel().getSelectedItem()));
        cm.getItems().addAll(miAdd, miRemove);

        listView.setContextMenu(cm);
        miRemove.getStyleClass().add(STYLED);
        change.setOnAction(event -> {
            if (!miRemove.getStyleClass().contains(STYLED)) {
                miRemove.getStyleClass().add(STYLED);
            } else {
                miRemove.getStyleClass().remove(STYLED);
            }
        });

    }
}

View.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="textField.Controller"
            stylesheets="css/layout.css">
    <VBox>
        <Button fx:id="change" text="ChangeStyle"/>
        <ListView fx:id="listView"/>
    </VBox>
</AnchorPane>

layout.css:

.styled .text {
    -fx-strikethrough: true;
}

.styled {
    -fx-background-color: gray;
}

Как мне удается добавить / удалить стиль для моего MenuItem?

...