1
有沒有辦法從JavaFX TreeView中獲取Item節點作爲列表?如何獲取TreeView項目列表
TreeView<String> treeView = new TreeView<>(treeItemRoot);
例如,我想將組件放到HashMap中。
有沒有辦法從JavaFX TreeView中獲取Item節點作爲列表?如何獲取TreeView項目列表
TreeView<String> treeView = new TreeView<>(treeItemRoot);
例如,我想將組件放到HashMap中。
以下是一種可能的方法。我沒有使用字符串,而是創建了一個可以容納一些屬性的自定義對象。我設置它是否是一個標題或標題。然後我瀏覽節點,如果它不是標題,我將它們添加到HashMap中。你可以將標題項添加到地圖或任何你想要的。
代碼
package application;
import java.util.HashMap;
import java.util.Map;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application {
Map<String, MyNode> map = new HashMap<String, MyNode>();
@Override
public void start(Stage stage) {
try {
BorderPane border = new BorderPane();
Scene scene = new Scene(border);
stage.setWidth(500);
stage.setHeight(400);
TreeItem<MyNode> rootItem = new TreeItem<MyNode>();
rootItem.setExpanded(true);
rootItem.setValue(new MyNode("Top Header", true));
//Subtree 1
TreeItem<MyNode> subTree1Item = new TreeItem<MyNode>();
subTree1Item.setExpanded(true);
subTree1Item.setValue(new MyNode("Subtree 1", true));
rootItem.getChildren().add(subTree1Item);
for (int i = 1; i < 6; i++) {
TreeItem<MyNode> item = new TreeItem<MyNode>();
item.setValue(new MyNode("Subtree 1 Item "+i, false));
subTree1Item.getChildren().add(item);
}
//Subtree 2
TreeItem<MyNode> subTree2Item = new TreeItem<MyNode>();
subTree2Item.setExpanded(true);
subTree2Item.setValue(new MyNode("Subtree 2", true));
rootItem.getChildren().add(subTree2Item);
for (int i = 1; i < 6; i++) {
TreeItem<MyNode> item = new TreeItem<MyNode>();
item.setValue(new MyNode("Subtree 2 Item "+i, false));
subTree2Item.getChildren().add(item);
}
TreeView<MyNode> tree = new TreeView<MyNode>(rootItem);
//Populate map with leaf nodes
populateMap(rootItem);
//Print map
for(MyNode node : map.values()){
System.out.println(node.getTitle());
}
border.setCenter(tree);
stage.setScene(scene);
stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
private void populateMap(TreeItem<MyNode> item){
if(item.getChildren().size() > 0){
for(TreeItem<MyNode> subItem : item.getChildren()){
populateMap(subItem);
}
}
else {
MyNode node = (MyNode) item.getValue();
if(!node.isHeader()){
map.put(node.getTitle(), node);
}
}
}
private class MyNode {
boolean header;
String title;
public MyNode(String title, boolean header){
this.title = title;
this.header = header;
}
public boolean isHeader() {
return header;
}
public void setHeader(boolean header) {
this.header = header;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String toString(){
return title;
}
}
public static void main(String[] args) {
launch(args);
}
}