JavaFX: привязка TextArea к элементу выбранного TreeItem (содержится в TreeView)

Я создаю следующий JavAFX, и я довольно плохо знаком с ним. Вот как это выглядит:

http://i.imgur.com/nfzQzIY.png

Как вы можете видеть, что естьTreeView слева, а также некоторыеTextAreaв центре. Пожалуйста, игнорируйте остальное.

Буквенно-цифровые строки слеваTreeView являютсяPlugTreeItem объекты класса, которые я построил, чтобы расширить TreeItem и иметь дополнительный держатель дляPlug деталь, вот так:

public class PlugTreeItem<T> extends TreeItem{

    private Plug plugItem = null;

    //########################### PROCS ########################################

    public PlugTreeItem(Object t, Plug pl) {
        super(t);
        plugItem = pl;
    }

    public PlugTreeItem(Object t, Node node, Plug pl) {
        super(t, node);
        plugItem = pl;
    }

    public void setPlugItem(Plug plugItem) {
        this.plugItem = plugItem;
    }

    public Plug getPlugItem() {
        return plugItem;
    }
}

ИTreeView построен чтениемPlugс базы данных SQL, создаваяPlugTreeItem объекты, связывающие плагин сPlugTreeItem затем добавляем это к корневому узлу дерева (который был изначально создан как фиктивный), из которого мы делаемTreeView: НОТА: result_set содержит матрицу результатов SQL. MAC - это поле, содержащее адреса, которые вы видите слева на скриншоте.

treeItemRoot = new PlugTreeItem<>("Active Plugs", new Plug());          //Root of the tree, contains a dummy Plug object.
selectedTreeItem = treeItemRoot;  //Holder of our currently selected TreeItem, see Listener below.

TreeView<String> treeView = new TreeView<>(treeItemRoot);

while(result_set.next()){
    Plug pl = null;                                         
    pl = new Plug(result_set.getString("SIHUid"), result_set.getString("sensorID"), result_set.getString("Location"), result_set.getString("Appliance"), result_set.getString("Type"), result_set.getString("connection"));
    PlugTreeItem<String> pti = new PlugTreeItem(pl.getMAC(),pl);
    treeItemRoot.getChildren().add(pti);
}

Наконец, у меня есть несколько TextAreas, как вы видите на скриншоте приложения. Я хочу, чтобы те отражали элементы выбранногоPlugTreeItem вTreeViewДавайте начнем с Plug MAC TextArea, который я хочу отразить тем же значением, которое вы видите слева.

Я добавил следующего слушателяselectedTreeItem так что каждый раз, когда пользователь нажимает наTreeItem,selectedTreeItem обновляется и содержит ссылку на этот конкретныйPlugTreeItem:

treeView.getSelectionModel().selectedItemProperty().addListener( new ChangeListener() {     
            @Override
            public void changed(ObservableValue observable, Object oldValue, Object newValue) { 
                selectedTreeItem = (PlugTreeItem<String>) newValue;
                System.out.println("Selection plug MAC: " + selectedTreeItem.getPlugItem().getMAC());           //MARKER: REMOVE
                // do what ever you want 
            }
        });

Надеюсь, это делает то, что я думаю.System.out Команда подтверждает, что всякий раз, когда я нажимаю на разные элементы в дереве, печатается MAC-адрес, по которому я щелкнул.

Как я могу сказать своим TextAreas: «Эй, слушай selectedTreeItem. Когда он меняется, получи определенное значение и установи его в качестве своего текста»?

Я попытался добавить второй слушатель на определенном полеPlug что я изменил с String наStringProperty так что это становитсяObservableValue, Однако даже после связывания textProperty TextArea с StringProperty его содержимое не изменяется.

Я знаю, что мог неправильно сформулировать свой вопрос из-за его размера. Пожалуйста, не стесняйтесь спрашивать меня о любой дополнительной информации или коде, который я, возможно, пропустил, или вы считаете это неважным.

Ответы на вопрос(1)

Ваш ответ на вопрос