Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:将属性绑定到窗格时遇到问题_Java_Javafx - Fatal编程技术网

JavaFX:将属性绑定到窗格时遇到问题

JavaFX:将属性绑定到窗格时遇到问题,java,javafx,Java,Javafx,我是一个刚刚开始学习JavaFX的初学者,我似乎在我的程序中犯了同样的错误。例如,在下面的代码中,我试图绘制X轴和Y轴,并将其绑定到窗格宽度和高度的一半。执行时,轴非常小,位于左上角,但当您调整应用程序窗口的大小时,轴的大小会慢慢增加,直到窗口不再调整大小为止 public class Debug extends Application { @Override public void start(Stage primaryStage) { Pane pane =

我是一个刚刚开始学习JavaFX的初学者,我似乎在我的程序中犯了同样的错误。例如,在下面的代码中,我试图绘制X轴和Y轴,并将其绑定到窗格宽度和高度的一半。执行时,轴非常小,位于左上角,但当您调整应用程序窗口的大小时,轴的大小会慢慢增加,直到窗口不再调整大小为止

public class Debug extends Application {
    @Override
    public void start(Stage primaryStage) {
        Pane pane = new Pane();
        GraphFunc test = new GraphFunc();
        pane.getChildren().add(test);

        Scene scene = new Scene(pane, 500, 500);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

class GraphFunc extends Pane {
    private double xAxisSpan, yAxisSpan;

    public GraphFunc() {
        xAxisSpan = 100;
        yAxisSpan = 100;
        drawAxes();
    }

    private void drawAxes() {
        Line xAxis = new Line(0, 50, 100, 50);
        Line yAxis = new Line(50, 0, 50, 100);
        xAxis.setStartX(0);
        xAxis.startYProperty().bind(heightProperty().divide(2));
        xAxis.endXProperty().bind(widthProperty());
        xAxis.endYProperty().bind(heightProperty().divide(2));

        yAxis.startXProperty().bind(widthProperty().divide(2));
        yAxis.setStartY(0);
        yAxis.endXProperty().bind(widthProperty().divide(2));
        yAxis.endYProperty().bind(heightProperty());

        getChildren().addAll(xAxis, yAxis);
    }
}

我很困惑,因为当窗格更改为StackPane时,不会发生这种情况。另外,如果我将drawAxes()中的代码移到start()并将行添加到窗格中,它也不会这样做。请解释一下,在研究和玩弄它之后,我似乎无法理解发生了什么。

这是因为窗格。窗格用于需要绝对定位子对象时使用

这来自Oracle文档:

此类可直接用于需要绝对定位子对象的情况,因为它除了将可调整大小的子对象调整为其首选大小之外,不会执行布局。应用程序负责定位子项,因为在布局过程中,窗格会单独保留这些位置

如果从场景中删除宽度和高度,而是直接将宽度和高度设置为on,以进行如下测试:

公共作废开始(阶段primaryStage){
GridPane=新建GridPane();
GraphFunc测试=新GraphFunc();
测试。设置预大小(500500);
pane.getChildren().add(测试);
场景=新场景(窗格);
初级阶段。场景(场景);
primaryStage.show();
}
    Pane pane = new Pane();
    GraphFunc test = new GraphFunc();
    pane.getChildren().add(test);

    Scene scene = new Scene(pane, 500, 500);