JAVAFX - 将节点添加到TitledPane的标题

时间:2017-06-29 02:43:45

标签: layout javafx alignment nodes

我想将节点添加到TitledPane的标头中。我发现这样做的唯一方法是使用setGraphic()方法。

使用这种方式的问题是我不能整齐地放置它们。这是我得到的: Nodes Inside TitledPane's Header

代码

        TitledPane tpane = new TitledPane();
        tpane.setContent(new Text("Content"));
        tpane.setExpanded(false);

        Button b = new Button("Delete");            

        BorderPane box = new BorderPane();
        box.setLeft(new Text("1 "));
        box.setCenter(new Text("Single Pane"));            
        box.setRight(b);     


        AnchorPane par = new AnchorPane(box);
        tpane.setGraphic(par);

        VBox vbox = new VBox();
        vbox.getChildren().add(tpane); 

目标

我想将Delete按钮放在右侧,这就是我使用Borderpane的原因。因此,BorderPane需要填充整个TitledPane的标头宽度减去小三角形的空间

如何在setGraphic()方法内完成?或者有更好的方法来实现它吗?

2 个答案:

答案 0 :(得分:2)

要解决您的问题,请尝试将BorderPane的宽度设置为场景的宽度减去这样的箭头。

TitledPane tpane = new TitledPane();
    tpane.setContent(new Text("Content"));
    tpane.setExpanded(false);

    Button b = new Button("Delete");            

    BorderPane box = new BorderPane();
    box.setLeft(new Text("1 "));
    box.setCenter(new Text("Single Pane"));            
    box.setRight(b);     


    AnchorPane par = new AnchorPane(box);
    tpane.setGraphic(par);

    VBox vbox = new VBox();
    vbox.getChildren().add(tpane); 

    box.setPrefWidth(scene.getWidth()-30);//You can adjust the number to fit your needs and change scene to whatever the name of your scene is 

我希望这有帮助

答案 1 :(得分:1)

嗯,似乎对javafx用户的支持并不像主流框架那么大。

经过@Austin建议的一些尝试,我找到了做我想要的方法,这也是动态的尺寸。

box.prefWidthProperty().bind(scene.widthProperty().subtract(35));

    TitledPane tpane = new TitledPane();
    tpane.setContent(new Text("Content"));
    tpane.setExpanded(false);

    Button b = new Button("Delete");            

    BorderPane box = new BorderPane();
    box.setLeft(new Text("1 "));
    box.setCenter(new Text("Single Pane"));            
    box.setRight(b);     

    tpane.setGraphic(box);
    box.prefWidthProperty().bind(scene.widthProperty().subtract(35));
    VBox vbox = new VBox();
    vbox.getChildren().add(tpane);