【问题标题】:Add content in TitlePane在 TitlePane 中添加内容
【发布时间】:2014-04-10 20:20:51
【问题描述】:

我想在 TitlePana 中添加几个 TreeView。

private static TitledPane pane = new TitledPane("Connections", null);


public static void initTree(String name)
    {
        pane.setContent(tree(name));
    }

pane.setContent(<node>);

但是当我添加 TreeView 时,新节点总是替换旧节点。这是设计问题吗。知道这是代码问题吗?

【问题讨论】:

    标签: javafx javafx-2 javafx-8


    【解决方案1】:

    将标题窗格的内容设置为某个布局窗格,然后将树视图添加到布局窗格。

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.TitledPane;
    import javafx.scene.control.TreeItem;
    import javafx.scene.control.TreeView;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    
    public class TreesInATitledPane extends Application {
    
        @Override
        public void start(Stage primaryStage) {
    
            final TitledPane titledPane = new TitledPane();
            titledPane.setText("Trees");
    
            final VBox forest = new VBox(5);
    
            final int NUM_TREES = 4 ;
            for (int i=1; i<= NUM_TREES; i++) {
                forest.getChildren().add(createRandomTree("Tree "+i));
            }
    
            titledPane.setContent(forest);
    
            final BorderPane root = new BorderPane();
            root.setTop(titledPane);
            final Scene scene = new Scene(root, 300, 600);
            primaryStage.setTitle("Can't see the forest for the trees");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        public TreeView<String> createRandomTree(String prefix) {
            final Random rng = new Random();
            List<TreeItem<String>> nodes = new ArrayList<>();
            TreeItem<String> root = new TreeItem<>(prefix + " Root");
            root.setExpanded(true);
            nodes.add(root);
            for (int i=1 ; i < 15; i++) {
                final TreeItem<String> treeItem = new TreeItem<>(prefix + " Item "+i);
                treeItem.setExpanded(true);
                nodes.get(rng.nextInt(i)).getChildren().add(treeItem);              
                nodes.add(treeItem);
            }
            TreeView<String> tree = new TreeView<>(root);
            return tree ;
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    【讨论】:

    • 我测试过使用 VBox,但事实证明 TreeView 组件没有放在彼此下方。它们被平等地放置在不好的 TitledPane 上。还有其他解决方案吗?例如将几个树根节点合并到一个 TreeView 中?
    • 我不知道“平等放置在 TitledPane 上”是什么意思。我试过了,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多