如何使用JavaFX将TreeView插入accordion

如何使用JavaFX将TreeView插入accordion,java,javafx-2,javafx,Java,Javafx 2,Javafx,我有一个问题,如何插入可扩展到手风琴的三视图 这是手风琴的代码: public TitledPane createConnectionsTree(String title) { connectionsData = FXCollections.observableArrayList(connectionsList); ListView<ConnectionsObject> lv = new ListView<>(connectionsData);

我有一个问题,如何插入可扩展到手风琴的三视图

这是手风琴的代码:

public TitledPane createConnectionsTree(String title) {
    connectionsData = FXCollections.observableArrayList(connectionsList);
    ListView<ConnectionsObject> lv = new ListView<>(connectionsData);

    lv.setCellFactory(new Callback<ListView<ConnectionsObject>, ListCell<ConnectionsObject>>() {
        @Override
        public ListCell<ConnectionsObject> call(ListView<ConnectionsObject> p) {
            return new ConnectionsCellFactory();
        }
    });
    AnchorPane content = new AnchorPane();
    content.getChildren().add(lv);
    // add to TitelPane
    TitledPane pane = new TitledPane(title, content);
    return pane;
}
公共标题窗格createConnectionsTree(字符串标题){
connectionsData=FXCollections.observableArrayList(connectionsList);
ListView lv=新的ListView(connectionsData);
lv.setCellFactory(新回调(){
@凌驾
公共ListCell调用(ListView p){
返回新连接CellFactory();
}
});
锚烷含量=新锚烷();
content.getChildren().add(lv);
//添加到TitelPane中
标题窗格=新标题窗格(标题、内容);
返回窗格;
}
这是treeview代码:

public void initTree() {
    rootNode.setExpanded(true);

    for (Employee employee : employees) {
        TreeItem<String> empLeaf = new TreeItem<>(employee.getName());
        boolean found = false;

        for (TreeItem<String> depNode : rootNode.getChildren()) {
            if (depNode.getValue().contentEquals(employee.getDepartment())) {
                depNode.getChildren().add(empLeaf);
                found = true;
                break;
            }
        }
        if (!found) {
            TreeItem depNode = new TreeItem(employee.getDepartment());
            rootNode.getChildren().add(depNode);
            depNode.getChildren().add(empLeaf);
        }
    }
    VBox box = new VBox();
    TreeView<String> treeView = new TreeView<>(rootNode);
    treeView.setShowRoot(true);
    treeView.setEditable(true);
    box.getChildren().add(treeView);
}
public void initTree(){
setExpanded(true);
用于(员工:员工){
TreeItem empLeaf=newtreeitem(employee.getName());
布尔值=false;
for(TreeItem depNode:rootNode.getChildren()){
if(depNode.getValue().contentEquals(employee.getDepartment())){
depNode.getChildren().add(empLeaf);
发现=真;
打破
}
}
如果(!找到){
TreeItem depNode=新的TreeItem(employee.getDepartment());
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
}
VBox box=新的VBox();
TreeView TreeView=新的TreeView(rootNode);
treeView.setShowRoot(真);
treeView.setEditable(true);
box.getChildren().add(treeView);
}
p.S

我得到这个结果:

当我展开树视图时,我想展开手风琴的滑块,而不是树视图的滑块。这是我测试的代码:

 public TitledPane createConnectionsList(String title) {

    rootNode.setExpanded(true);
    for (ThreeData conn : connectionsThree) {
        TreeItem<String> empLeaf = new TreeItem<>(conn.getName());
        boolean found = false;
        for (TreeItem<String> depNode : rootNode.getChildren()) {
            if (depNode.getValue().contentEquals(conn.getDepartment())) {
                depNode.getChildren().add(empLeaf);
                found = true;
                break;
            }
        }
        if (!found) {
            TreeItem depNode = new TreeItem(conn.getDepartment());
            rootNode.getChildren().add(depNode);
            depNode.getChildren().add(empLeaf);
        }
    }
    TreeView<String> treeView = new TreeView<>(rootNode);
    treeView.setShowRoot(true);
    treeView.setEditable(true);

    AnchorPane content = new AnchorPane();
    // Set aligment - fill the accordion with the three content
    AnchorPane.setLeftAnchor(treeView, 0d);
    AnchorPane.setRightAnchor(treeView, 0d);
    AnchorPane.setBottomAnchor(treeView, 0d);
    AnchorPane.setTopAnchor(treeView, 0d);

    content.getChildren().add(treeView);
    // Add to TitelPane
    TitledPane pane = new TitledPane(title, content);
    return pane;
}
公共标题窗格createConnectionsList(字符串标题){
setExpanded(true);
用于(三数据连接:连接三){
TreeItem empLeaf=newtreeitem(conn.getName());
布尔值=false;
for(TreeItem depNode:rootNode.getChildren()){
if(depNode.getValue().contentEquals(conn.getDepartment())){
depNode.getChildren().add(empLeaf);
发现=真;
打破
}
}
如果(!找到){
TreeItem depNode=新的TreeItem(conn.getDepartment());
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
}
TreeView TreeView=新的TreeView(rootNode);
treeView.setShowRoot(真);
treeView.setEditable(true);
锚烷含量=新锚烷();
//设置对齐-用三个内容填充手风琴
AnchorPane.setLeftAnchor(树视图,0d);
AnchorPane.setRightAnchor(树视图,0d);
锚烷.后坐式锚(treeView,0d);
AnchorPane.setTopAnchor(树视图,0d);
content.getChildren().add(treeView);
//添加到TitelPane中
标题窗格=新标题窗格(标题、内容);
返回窗格;
}

在使用FXML在SceneBuilder中设计GUI时,问题可能更为明显。您需要使用锚具锚定节点,以便它们伸展。例如:

    AnchorPane.setLeftAnchor(aNode, 0d);
    AnchorPane.setRightAnchor(aNode, 0d);
    AnchorPane.setBottomAnchor(aNode, 0d);
    AnchorPane.setTopAnchor(aNode, 0d);
这将把节点阳极的每个角固定到锚具的角上。这是在SceneBuilder中选择AnchorPane上的“适合父对象”选项时得到的结果


如果做不到这一点,只需使用FXML,这将使您更容易获得所需的GUI。

有什么问题?手风琴不跟踪树视图的大小?或者,当您将TreeView放入TitledPane,将TitledPane放入accordion时,某些内容未显示?将树放入VBox width属性
VBox.setVgrow(Tree,Priority.ALWAYS)@Kalaschni我更新了代码,但没有任何效果。也许我在某个地方出错了?是的,这解决了树拉伸的问题,但我仍然有一个问题,即如何实现
VBox.setVgrow(tree,Priority.ALWAYS)