[英]JavaFx: How to make a cube adjust to window resize
我正在执行的javafx练习遇到问题。 从根本上说,问题在于制作一个矩形立方体,并使其在您调整窗口大小时自动扩展或收缩。 我已经完成了程序第一部分的工作,但是第二部分却遇到了困难。 这是我的代码:
public void start(Stage primaryStage) {
Pane pane = new Pane();
//Draw two rectangles
Rectangle upper = new Rectangle(140, 100, 120, 100);
upper.setFill(null);
upper.setStroke(Color.BLACK);
Rectangle lower = new Rectangle(100, 140, 120, 100);
lower.setFill(null);
lower.setStroke(Color.BLACK);
//Draw the line connecting them
Line ul = new Line(140, 100, 100, 140);
Line ur = new Line(260, 100, 220, 140);
Line ll = new Line(140, 200, 100, 240);
Line lr = new Line(260, 200, 220, 240);
pane.getChildren().addAll(upper, lower, ul, ur, ll, lr);
Scene scene = new Scene(pane, 200, 200);
primaryStage.setTitle("Exercise14");
primaryStage.setScene(scene);
primaryStage.show();
}
矩形立方体就这样显示,但是当我调整窗口大小时,我不知道如何使它扩展或收缩:
我想我需要将每个单独的形状绑定到窗格或其他内容,但是我不确定从哪里开始。 希望方向正确。 谢谢。
您需要将更改侦听器添加到场景,并计算相对于场景的宽度和高度的多维数据集的尺寸。 像这样:
ChangeListener<Number> listenerX = new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println( "X: observable: " + observable + ", oldValue: " + oldValue.doubleValue() + ", newValue: " + newValue.doubleValue());
// TODO:
// Lines:
// line.setStartX(...)
// line.setStartY(...)
// line.setEndX(...)
// line.setEndY(...)
//
// Rectangles:
// rect.setTranslateX(...)
// rect.setTranslateY(...)
// rect.setWidth(...)
// rect.setHeight(...)
// hint: instead of translate you can use rect.relocate(..., ...). translate is relative, relocate applies layoutX/Y and translateX/Y
}
};
ChangeListener<Number> listenerY = new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
System.out.println( "Y: observable: " + observable + ", oldValue: " + oldValue.doubleValue() + ", newValue: " + newValue.doubleValue());
// similare to listenerX
}
};
scene.widthProperty().addListener( listenerX);
scene.heightProperty().addListener( listenerY);
我建议在这里说明的方法: http : //fxexperience.com/2014/05/resizable-grid-using-canvas/
基本上,您将创建自定义窗格,并覆盖“ layoutChildren()”方法以绘制多维数据集。 您“只是”必须用您的多维数据集替换绘图代码。
这比使用侦听器方法快得多:调整节点大小时,使用侦听器(设置了宽度和高度时)将最少绘制两次。 “ layoutChildren()”最多每帧绘制一幅。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.