创建嵌套TreeItem JavaFX中
问题描述:
在我的TreeTableView TreeItem相貌平平的时间和这样的:创建嵌套TreeItem JavaFX中
//////////////////row//////////////////////////////
for (Entry<String, String> entryRow : dc.getSortedfuncAll().entrySet()) {
root.getChildren().add(new TreeItem<String>(entryRow.getValue()));
}
// ////////////////treetable////////////////////////////
final TreeTableView<String> treeTableView = new TreeTableView<>(root);
- AUF_1086686287581_9999
- AUF_1086686329972_10049
- AUF_1079023138936_6682
- AUF_1087981634453_7022
- AUF_1060589919844_59496
- AUF_1421268568003_1743
- AUF_1422451819445_14260
- AUF_1421268533080_1741
- AUF_1421268719761_1776
- AUF_1421272434570_1781
- AUF_1421268568003_1743
考虑让它们之间存在以下关系: 它是TreeMap<String,ArrayList<String>>
结果:
{AUF_1060589919844_59496=[AUF_1086686287581_9999,AUF_1086686329972_10049,AUF_1079023138936_6682],
AUF_1087981634453_7022=[AUF_1421268533080_1741, AUF_1421268568003_1743],
AUF_1421268533080_1741=[AUF_1421268719761_1776],
AUF_1421272434570_1781=[AUF_1087981634453_7022],
AUF_1422451819445_14260=[AUF_1421268568003_1743]}
我想他们有层次是这样的:
- AUF_1060589919844_59496
- AUF_1079023138936_6682
- AUF_1086686287581_9999
- AUF_1086686329972_10049
- AUF_1421272434570_1781
- AUF_1087981634453_7022
- AUF_1421268568003_1743
- AUF_1421268533080_1741
- AUF_1421268719761_1776
- AUF_1087981634453_7022
- AUF_1422451819445_14260
- AUF_1421268568003_1743
我应该在哪里尝试申请呢? (细胞工厂?),你能找出一种方法来建立嵌套关系吗?
答
这里是一个übernimmt你知道和供应作为输入初始树根前手的解决方案。
解决方案的工作由递归遍历数据结构,以确定矿在树每个层次要记录的TreeItems。输入图中的解决方案不是循环的。如果输入数据中有周期,解决方案将永远循环。
该解决方案在显示树之前创建所有树项目值,而不是在用户单击以扩展该级别时确定给定级别的树项目值。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.stage.Stage;
import java.util.Arrays;
import java.util.List;
import java.util.TreeMap;
import java.util.stream.Collectors;
public class NestedTree extends Application {
@Override
public void start(Stage stage) {
// create some sample data.
TreeMap<String, List<String>> data = new TreeMap<>();
data.put("AUF_1060589919844_59496", Arrays.asList("AUF_1086686287581_9999", "AUF_1086686329972_10049", "AUF_1079023138936_6682"));
data.put("AUF_1087981634453_7022", Arrays.asList("AUF_1421268533080_1741", "AUF_1421268568003_1743"));
data.put("AUF_1421268533080_1741", Arrays.asList("AUF_1421268719761_1776"));
data.put("AUF_1421272434570_1781", Arrays.asList("AUF_1087981634453_7022"));
data.put("AUF_1422451819445_14260", Arrays.asList("AUF_1421268568003_1743"));
String[] rootKeys = {
"AUF_1060589919844_59496",
"AUF_1421272434570_1781",
"AUF_1422451819445_14260"
};
// create the tree from the data.
TreeView<String> tree = createTreeView(
data,
rootKeys
);
// display the tree.
Scene scene = new Scene(tree);
stage.setScene(scene);
stage.show();
}
/**
* Create a TreeView of a set of data
* given the data and identified roots within the data.
*/
private TreeView<String> createTreeView(
TreeMap<String, List<String>> data,
String[] rootKeys
) {
TreeItem<String> root = new TreeItem<>();
Arrays.stream(rootKeys).sorted().forEach(
rootKey ->
root.getChildren().add(
createTreeItem(data, rootKey)
)
);
TreeView<String> tree = new TreeView<>();
tree.setRoot(root);
tree.setShowRoot(false);
return tree;
}
/**
* Create a TreeItem for a TreeView from a set of data
* given the data and an identified root within the data.
*/
private TreeItem<String> createTreeItem(
TreeMap<String, List<String>> data,
String rootKey
) {
TreeItem<String> item = new TreeItem<>();
item.setValue(rootKey);
item.setExpanded(true);
List<String> childData = data.get(rootKey);
if (childData != null) {
childData.stream()
.sorted()
.map(
child -> createTreeItem(data, child)
)
.collect(
Collectors.toCollection(item::getChildren)
);
}
return item;
}
public static void main(String[] args) {
Application.launch(args);
}
}
真的很棒。虽然我以前不知道rooKeys。我试图找出找到它们的方法。 – Iman 2015-03-03 01:16:18