我正在構建下面的JavAFX,我對它完全陌生。這裏是什麼樣子:JavaFX:將TextArea綁定到所選TreeItem的元素(包含在TreeView中)
http://i.imgur.com/nfzQzIY.png
正如你可以看到有左側以及一些TextArea
S IN中心TreeView
。請忽略其餘部分。
左側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
: 注:結果_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,就像你在應用截圖中看到的那樣。我希望那些能夠反映TreeView
中選定的PlugTreeItem
的元素,讓我們從插入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
的特定字段上添加第二個偵聽器,該字段已從字符串更改爲StringProperty
,以便它變爲ObservableValue
。但是,即使將TextArea的textProperty與StringProperty綁定後,它也不會更改其內容。
我知道我可能因爲它的大小而錯誤地回答了我的問題。請不要猶豫,問我任何額外的信息或代碼,我可能已經省略或你認爲imoprtant。
看起來像這樣的「乞討問題」...是否有意義將TreeItem綁定到TextArea?對於大多數情況,我認爲將兩者都綁定到基礎模型值是更有意義的。不是說這個Q/A是錯誤的,儘管恕我直言,它可能不是最佳設計。 – Joel