Как использовать BreadCrumbBar в ControlsFX (JavaFX 8)

Я новичок в Java, пытающийся использовать BreadCrumbBar из ControlsFX для создания панели навигации в настольном приложении, которое я делаю с использованием JavaFX 8. Кажется, я не могу заставить панель работать так, как я хочу, и Поиск учебника в Интернете не дал результатов. Я нашел API, но это мало помогает.

Мой код прикреплен ниже:

@FXML
private BreadCrumbBar bread;

private TreeItem<String> tree, tree1, tree2;

@FXML
private void initialize(){
    tree = new TreeItem<String>("Log In");
    tree1 = new TreeItem<String>("Language Selection");
    tree2 = new TreeItem<String>("Patient List");
    tree.getChildren().addAll(tree1, tree2);
    bread.setSelectedCrumb(tree);
}

public void refresh(){
    bread.setSelectedCrumb(tree.nextSibling(bread.getSelectedCrumb()));
}

Панель появляется так, как должна, на экране входа в систему отображается только «Войти» в качестве выбранной крошки. Я вызываю обновление из основного класса каждый раз, когда хочу перейти к следующей кнопке хлебной крошки, но полоса просто исчезает при перемещении с первого экрана. Разве он не должен установить выбранную крошку на следующего брата дерева, то есть на дерево1?

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

Спасибо!


person Jay Vaidya    schedule 19.06.2015    source источник
comment
Можете ли вы добавить код для MainClass, где вы загружаете FXML и вызываете refresh()?   -  person ItachiUchiha    schedule 19.06.2015
comment
Я больше не использую эту структуру, так что это не имеет смысла. Я могу заставить панировочные сухари не отображаться, но щелчок ничего не делает. Работаю над этим!   -  person Jay Vaidya    schedule 22.06.2015


Ответы (1)


BreadCrumbBar использует дерево для отображения навигации, поэтому вам следует создать TreeItem.

Вот пример дерева с 3 уровнями:

    TreeItem<String> root = new TreeItem<String>("Root");

    TreeItem<String> item1 = new TreeItem<String>("Item 1");
    TreeItem<String> item11 = new TreeItem<String>("Item 1.1");
    TreeItem<String> item12 = new TreeItem<String>("Item 1.2");

    item1.getChildren().addAll(item11, item12);

    TreeItem<String> item2 = new TreeItem<String>("Item 2");

    root.getChildren().addAll(item1, item2);

Тогда у вас есть дерево, графически представленное следующим образом:

                   <item11>
                 /
         <item1>
       /         \
<root>             <item12>
       \
         <item2>

Когда вы используете BreadCrumbBar.setSelectedCrumb(TreeItem<?>), вы выбираете

самый нижний узел пути (узел с самой правой стороны с точки зрения панели хлебных крошек)

Итак, если вы используете breadcrumb.selectedCrumbProperty().set(root);, вы получите:

введите здесь описание изображения

И если вы используете breadcrumb.selectedCrumbProperty().set(item11);, вы получите:

введите здесь описание изображения

Надеюсь, это поможет, я на самом деле тоже пытаюсь понять, как это работает ^^

person Torarn    schedule 19.06.2015
comment
Спасибо, что помогло! Я бы проголосовал, если бы у меня был представитель: D Не могу понять, как заставить работать автонавигацию. Если вам удастся получить это, дайте мне знать. - person Jay Vaidya; 22.06.2015
comment
@JayVaidya autoNavigationEnabled по умолчанию включен. Вы можете увидеть это, когда щелкнете элемент BreadCrumbBar: элемент, по которому щелкнули, станет самым правильным элементом. Но вам все равно придется прослушивать событие изменения BreadCrumbBar. Чтобы поэкспериментировать самостоятельно, поиграйте с autoNavigationEnabled с System.out.println() в прослушивателе onCrumbAction. - person Torarn; 23.06.2015