Я здесь, потому что мои исследования и тестирование ни к чему не привели.Перетаскивание JavaFX для изменения узлов
Я сделал небольшое приложение для календаря, и теперь я хочу улучшить пользовательский интерфейс с помощью приятных элементов управления. Я пытаюсь создать интерфейс, в котором вы можете создать событие, перетащив его (как вы можете сделать в повестке дня Google, на самом деле это школьный проект, и я хочу воспроизвести представление на этой неделе).
Для этого я попробовал этот подход: Для каждой ячейки области (в GridPane, которые содержат VBoxes) я придаю обработчики, которые обеспечивают достижение этой функции (setOnDragDetected, setOnMouseDragEntered и setOnMouseDragReleased). И это хорошо работает, но в некоторых случаях это не работает (если мышь перемещается по другому событию, у которого нет обработчиков, функция перетаскивания останавливается).
Поскольку я видел это слишком тяжелым и поддающимся подделке (3 обработчика x 7 столбцов x 48 строк = 1008 обработчиков !!), я думал о другом подходе, но я новичок в javaFX, и я не знаю, если есть и другой механизм для этого. (Я думал о прозрачной макете/панели, которая будет обрабатывать эту функцию и действовать как «сенсорный экран» поверх моего приложения, но я не нашел удовлетворительных ответов). Может ли кто-нибудь просветить меня об этой проблеме? Для хорошего примера того, что я пытаюсь достичь, вы принимаете поведение программы Google для создания события с помощью мыши (мне не нужно управлять перекрытием события). Заранее спасибо !! Я размещаю изображение того, как выглядит фактический вид.
Я бы не стал слушать события перетаскивания на отдельные ячейки, но в целом GridPane и преобразовывать координаты GridPane в координаты ячеек, где это необходимо. –
Lol кажется настолько очевидным. Я попробую! –
Я бы предположил, что перевод координат может быть сложным и, возможно, дорогим, как (по крайней мере, в принципе) вам придется протестировать все «временные интервалы» в представлении. (Хотя я бы предположил, что есть некоторые хорошие способы избежать этого.) С другой стороны, я не слишком убежден, что у ~ 1000 обработчиков или около того, которые в основном не вызваны очень сильно, это большая сделка. Вот [очень простой пример] (https://gist.github.com/james-d/c4a2cf66efecbf3aa362), который просто позволяет выбирать диапазон временных интервалов, используя этот подход. –