У меня проблемы с обработкой перетаскивания 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
Пока что ячейки переключают цвет, когда на них наведена мышь, но я хочу, чтобы цвет менялся только тогда, когда на них наведет курсор мыши.