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