Какой селектор CSS используется при обнаружении события DragOver? - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю пользовательский RowFactory для моего TableView для приема файлов перетаскивания.Я хочу обновить стиль определенного Row при обнаружении приемлемого события DragOver.

Использование :hover, очевидно, не будет работать, потому что это будет применяться, даже если пользователь ничего не перетаскивает.

Конечная цель состоит в том, чтобы просто визуально прояснить, в какую строку пользователь собирается отбросить элементы.

Есть ли селектор, который я могу использовать в моей таблице стилей для обработки этого?Я не смог найти ничего в Справочном руководстве по JavaFX CSS .


В настоящее время я могу обойти это, определив свой собственный StyleClass и добавив его в метод setOnDragOver():

setOnDragOver(event -> {
    // Determine if the dragged items are files
    if (!this.isEmpty() && event.getDragboard().hasFiles()) {
        event.acceptTransferModes(TransferMode.LINK);
        this.getStyleClass().add("dragging");
    }
});

Однако попытка удалить класс при выходе не работает:

setOnDragExited(event -> this.getStyleClass().remove("dragging"));

Редактировать: Я также должен уточнить, что у каждой строки могут быть другие стилиприменяется к ним (на основе нескольких факторов), и при перетаскивании нужно добавить стиль в строку, а не заменить все остальные)

1 Ответ

3 голосов
/ 25 сентября 2019

Как уже упоминалось @kleopatra, работа с пользовательским псевдо-классом может работать на вас.

/**
 * Interface to keep all custom pseudo classes.
 */
public interface Styles{

    /** Dragged pseudo class. */
    public static final PseudoClass DRAGGED_PSEUDOCLASS = PseudoClass.getPseudoClass("dragged");
}

В вашем коде:

setOnDragOver(event -> {
    if (!this.isEmpty() && event.getDragboard().hasFiles()) {
        event.acceptTransferModes(TransferMode.LINK);
        this.pseudoClassStateChanged(Styles.DRAGGED_PSEUDOCLASS,true);
    }
});

setOnDragExited(event -> this.pseudoClassStateChanged(Styles.DRAGGED_PSEUDOCLASS,false));

В CSS:

.table-row-cell:dragged{
  -fx-background-color:$custom-color;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...