Положение узла в TreeView - PullRequest
       0

Положение узла в TreeView

0 голосов
/ 27 ноября 2018

Как я могу получить положение узла из TreeView с событием onclick в JavaFX?

JavaFX scene

Скажем, когда я нажимаю на узел (dolor sit amet,), выделенный черным кружком, как я могу получить позицию?

Я пробовал это с событием, когда узел расширяется:

root.addEventHandler(EventType.ROOT, (Event event) -> {
        if (event.getEventType().getName().equals("BranchExpandedEvent")) {
            TreeItem item = (TreeItem) event.getSource();
            //here I want to know item position
        }
    });

1 Ответ

0 голосов
/ 28 ноября 2018

Node, о котором вы говорите, известен как disclosureNode и доступен через TreeCell.

Узел раскрытия обычно представлен представленнымкак треугольник, который вращается на экране, чтобы указать, является ли TreeItem, который он расположен рядом, развернутым или свернутым.

Вы можете получить позицию этого Node с такими свойствами, как Node.boundsInLocal или Node.boundsInParentNode также есть методы для преобразования между координатными пространствами (например, localToScene, sceneToLocal и т. Д.).


Кроме того, следующий код является подозрительным:

root.addEventHandler(EventType.ROOT, (Event event) -> {
    if (event.getEventType().getName().equals("BranchExpandedEvent")) {
    }
});

Вам не нужно проверять имя EventType.Вместо этого зарегистрируйте EventHandler для EventType, который вы хотите прослушать - в данном случае, TreeItem.branchExpandedEvent().Например, если ваши TreeItem s имеют значения типа String:

// "root" is a TreeItem<String>
// "event" is a TreeItem.TreeModificationEvent<String>
root.addEventHandler(TreeItem.<String>branchExpandedEvent(), event -> {
    // do something...
});

Если вы должны проверить EventType внутри EventHandler, то проверьте, что EventType s равны,не их имена;это менее подвержено ошибкам.

root.addEventHandler(Event.ANY, event -> {
    if (event.getEventType().equals(TreeItem.branchExpandedEvent()) {
        // do something...
    }
});

Я хочу иметь эту позицию и добавить некоторые другие узлы (вертикальная линия в моем случае, чтобы соединить элементы дерева на том же уровне) вTreeView.

Я не рассматривал это, но похоже, что это должно быть реализовано TreeCell.TreeItem не должен много знать, если вообще что-то, о представлении.Другими словами, обработка этого внутри обработчика событий, добавленного в корень TreeItem, кажется неправильным местом.Обратите внимание, что расширенный статус TreeItem можно получить из TreeCell, поскольку он имеет доступ к TreeItem.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...