javafx中的图表和按钮不';不渲染

javafx中的图表和按钮不';不渲染,java,javafx-8,Java,Javafx 8,我想呈现一个按钮数组,然后在屏幕上呈现一个图形图表。我尝试了几乎所有我能尝试的方法,但有些方法似乎不起作用。可以单独渲染按钮数组(usercontrol())或饼图(图形),但当我尝试同时渲染这两种操作时,它只渲染按钮数组。plz不必担心函数的返回类型。任何帮助都将不胜感激 public class Layout { // returns Windows height and width private final double width = 600; private

我想呈现一个按钮数组,然后在屏幕上呈现一个图形图表。我尝试了几乎所有我能尝试的方法,但有些方法似乎不起作用。可以单独渲染按钮数组(usercontrol())或饼图(图形),但当我尝试同时渲染这两种操作时,它只渲染按钮数组。plz不必担心函数的返回类型。任何帮助都将不胜感激

public class Layout {

    // returns Windows height and width
    private final double width = 600;
    private final double height = 400;

    private Button[] userControl() { // navigation bar buttons
        Button[] buttons = new Button[3];

        buttons[0] = new Button("BUY Share!"); // Buy shares buttons
        buttons[0].setLayoutX(width - 100);
        buttons[0].setLayoutY(10);
        buttons[1] = new Button("Sell Shares!"); // Sell shares buttons
        buttons[1].setLayoutX(width - 200);
        buttons[1].setLayoutY(10);
        buttons[2] = new Button("Show Share"); // Show shares buttons
        buttons[2].setLayoutX(width - 300);
        buttons[2].setLayoutY(10);
        return buttons;
    }

    public void pie() {
        ObservableList<PieChart.Data> shareHolders
                = FXCollections.observableArrayList(
                        new PieChart.Data("user1", 13),
                        new PieChart.Data("user2", 25),
                        new PieChart.Data("user3", 10),
                        new PieChart.Data("user4", 22),
                        new PieChart.Data("user5", 30));
        PieChart chart = new PieChart(shareHolders);
        chart.setTitle("Share Holders Shares");
        VBox pie = new VBox();
        pie.setLayoutY(100);
        pie.getChildren().addAll(chart);
        pane().getChildren().add(pie);
        // return pie;
    }

    private Pane pane() {
        Pane pane = new Pane();

        pane.getChildren().addAll(userControl());
        return pane;
    }

    public Stage window() {

        //pane().getChildren().add();
        pie();
        Scene scene = new Scene(pane(), 600, 400);
        Stage primaryStage = new Stage();
        primaryStage.setScene(scene);
        primaryStage.setTitle("ShareHolders!");
        primaryStage.show();
        return primaryStage;
    }

}
公共类布局{
//返回窗口的高度和宽度
专用最终双宽度=600;
私人最终双倍高度=400;
私有按钮[]用户控件(){//导航栏按钮
按钮[]按钮=新按钮[3];
按钮[0]=新建按钮(“购买股份!”;//购买股份按钮
按钮[0]。setLayoutX(宽度-100);
按钮[0]。设置布局(10);
按钮[1]=新建按钮(“出售股份!”;//出售股份按钮
按钮[1]。setLayoutX(宽度-200);
按钮[1]。设置布局(10);
按钮[2]=新按钮(“显示共享”);//显示共享按钮
按钮[2]。setLayoutX(宽度-300);
按钮[2]。设置布局(10);
返回按钮;
}
公众假期{
可观察股东
=FXCollections.observableArrayList(
新的图表数据(“用户1”,13),
新的图表数据(“用户2”,25),
新的图表数据(“用户3”,10),
新的图表数据(“用户4”,22),
新PieChart.Data(“user5”,30));
PieChart图表=新PieChart(股东);
图表.设定所有权(“股东股份”);
VBox pie=新的VBox();
馅饼。setLayoutY(100);
pie.getChildren().addAll(图表);
窗格().getChildren().add(饼图);
//回馈馅饼;
}
专用窗格(){
窗格=新窗格();
pane.getChildren().addAll(userControl());
返回窗格;
}
公共舞台窗口(){
//窗格().getChildren().add();
派();
场景=新场景(窗格(),600,400);
阶段primaryStage=新阶段();
初级阶段。场景(场景);
primaryStage.setTitle(“股东!”);
primaryStage.show();
返回初级阶段;
}
}

您的问题是,每次调用
窗格
方法时,您都在创建一个新的
窗格
。您需要更改它,可能需要使用全局窗格对象

//First, declare a global Pane.
static Pane pane = new Pane();

//Make your pie() method return the pie VBox.
public VBox pie() {
    /*Blah blah blah, making the pie...*/
    return pie//Remember, pie is a VBox, which is why we are returning the VBox.
}

//Later, when you build your window, add the pie and the buttons to the GLOBAL PANE...
public Stage window() {
    pane.getChildren().add(pie());      //...right here.
    pane.getChildren().addAll(userControl());
    /*Build the primary stage...*/
    return primaryStage;
}

这会让你得到你想要的结果。

提供一个(完整的东西,有人可以复制粘贴运行)。@jewelsea-idk-man,这是一个不错的问题。sorry@JacobB我刚刚修好了是的,编辑后好多了,谢谢,但还是不行。完全按照您在窗口函数中所说的做了,当您添加(pie(),userControl())时,它返回错误:==>没有为addAll(VBox,Button[])方法列表找到合适的方法。addAll(int,CollectionThank)非常感谢您的帮助。如果有任何线索表明它们在以“,”分隔时不起作用,方法重载有时会导致问题