Кажется, что графический интерфейс не всегда обновляется при удалении стиля CSS.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Кажется, что графический интерфейс не всегда обновляется при удалении стиля CSS.

Сообщение Anonymous »

Репозиторий Github
Я пытаюсь создать свою собственную игру-судоку, используя 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);
}
});
Сообщение об ошибке при нажатии (выдается даже при удалении правильно выбранного стиля CSS):

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»