Я пытаюсь создать свою собственную игру-судоку, используя JavaFX и CSS.
Это моя первая игра время использую CSS, и поэтому, вероятно, это довольно небрежная работа.
У меня есть GridPane в качестве корня и двухмерный фиксированный массив Label, который представляет каждый квадрат на доске судоку.
Я перебираю метки и добавляю стили CSS, используя: getStyleClass().add()
Затем я добавляю MouseEvent в корень: this.root.addEventFilter (MouseEvent.MOUSE_CLICKED, e -> {
У меня есть поле в классе Pair selectedNumber, которое содержит позицию выбранной метки.
Если поле не выбрано, оно содержит значения (-1, -1).
Это код для MouseEvent:
Код: Выделить всё
this.root.addEventFilter(MouseEvent.MOUSE_CLICKED, e -> {
if (e.getTarget() instanceof Label source) {
// If: There is already a selected square
// Then: De-select the square
if (this.selectedNumber.getKey() != -1 && this.selectedNumber.getValue() != -1) {
Label previouslySelected = numbers[this.selectedNumber.getKey()][this.selectedNumber.getValue()];
System.out.println("Before removal: " + previouslySelected.getStyleClass());
previouslySelected.getStyleClass().remove("numbers-selected");
System.out.println("After removal: " + previouslySelected.getStyleClass());
}
// Select the new label if it is not already selected
if (!source.getStyleClass().contains("numbers-selected") && source.getStyleClass().contains("numbers")) {
source.getStyleClass().add("numbers-selected");
this.selectedNumber = new Pair(
GridPane.getRowIndex(source),
GridPane.getColumnIndex(source)
);
} else {
this.selectedNumber = new Pair(-1, -1); //Set to default
}
System.out.println("New selected number: " + this.selectedNumber);
}
});
Код: Выделить всё
WARNING: Caught 'java.lang.ClassCastException: class java.lang.String cannot be cast to class javafx.scene.paint.Paint (java.lang.String is in module java.base of loader 'bootstrap'; javafx.scene.paint.Paint is in module javafx.graphics@21.0.2 of loader 'app')' while converting value for '-fx-background-color' from rule '*.numbers-selected' in stylesheet file:/C:/Users/pette/OneDrive/Documents/Programming/Java/Projects/Sudoku/target/classes/css/GameScreen.css
Код: Выделить всё
System.out.println("Before removal: " + previouslySelected.getStyleClass());
Код: Выделить всё
System.out.println("After removal: " + previouslySelected.getStyleClass());
Примечание: стиль всегда правильно добавляется() и всегда отображается в графическом интерфейсе.
/>Любая помощь будет оценена по достоинству!
Подробнее здесь: https://stackoverflow.com/questions/790 ... ss-styling
Мобильная версия