Какой MouseEvent следует использовать и как его обрабатывать, чтобы обойти сетку прямоугольников в JavaFX? - PullRequest
0 голосов
/ 15 июня 2019

У меня проблемы с обработкой перетаскивания MouseEvent. Я хочу, чтобы цвет прямоугольников переключался либо при щелчке по ним (что решено), либо при наведении мыши на них.

Я хочу вызвать функцию toggle для каждого Cell (который наследует класс Rectangle), когда мышь перетаскивают по ячейкам. Столбцы ячеек содержатся в VBox, которые в свою очередь находятся в главном HBox

Когда я использовал setOnMouseDragged, событие вызывается только для одной ячейки, а не для всех ячеек, по которым перетаскивается мышь.

    private class Cell extends Rectangle {
        private boolean isBlack = false;
        private int x, y;

        public Cell(int x, int y) {
            super(CELL_SIZE, CELL_SIZE);
            this.x = x;
            this.y = y;
            setFill(Color.WHITE);
            setStroke(Color.BLACK);

            setOnMouseClicked(e -> toggle());
            setOnMouseEntered(e -> toggle());  // this should be replaced with correct event handling
        }

        public void toggle() {
            isBlack = !isBlack;
            rectangle.setFill(isBlack ? Color.BLACK : Color.WHITE);
        }
    }

    @FXML
    public void initialize() {
        for (int x = 0; x < X_CELLS; ++x) {
            VBox vBox = new VBox();
            vBox.setAlignment(Pos.CENTER);

            for (int y = 0; y < Y_CELLS; ++y) {
                vBox.getChildren().add(new Cell(x, y));
            }
            hBox.getChildren().add(vBox);
        }
    }

Скриншот приложения FX Пока что ячейки переключают цвет, когда на них наведена мышь, но я хочу, чтобы цвет менялся только тогда, когда на них наведет курсор мыши.

...