【发布时间】:2017-04-23 20:24:22
【问题描述】:
我有一个非常复杂的场景图,这导致我遇到了一些调整大小的问题。如果你能帮我解决它,我会很高兴。
我的根节点是一个BorderPane,它的中心被一个ListView 填充。 ListView 的每个单元格都填充有自定义的可缩放ScrollPane,如下所示:
public class ZoomableScrollPane extends ScrollPane {
Group zoomGroup;
Scale scaleTransform;
LineChart<Number , Number> content;
double scaleValue = 1.0;
double delta = 0.1;
public ZoomableScrollPane(LineChart<Number , Number> content, double height) {
this.content = content;
this.setPrefHeight(height);
Group contentGroup = new Group();
zoomGroup = new Group();
contentGroup.getChildren().add(zoomGroup);
zoomGroup.getChildren().add(content);
setContent(contentGroup);
scaleTransform = new Scale(scaleValue, scaleValue, 0, 0);
zoomGroup.getTransforms().add(scaleTransform);
}
}
如您所见,每个ZoomableScrollPane 内部都有一个LineChart。我想用这张图表做两件事。首先,以某种方式将其宽度与根布局绑定,以在调整窗口大小的情况下获得所需的结果(不缩放,缩放即可),其次,每当按下按钮时,在运行时更改图表的宽度:
public void handleButton(ActionEvent actionEvent) {
MainController.lineChart1.setPrefWidth(MainController.lineChart1.getPrefWidth() + CONSTANT);
}
问题是我在这里遇到了冲突。因为LineChart 是Group(不是窗格)的子级,我只知道一种可调整大小的方法,那就是手动绑定其宽度 与根@ 987654331@是这样的:
MainController.lineChart1.prefWidthProperty().bind(fourChannels.widthProperty().subtract(40));
在这种情况下,我无法在运行时更改LineChart 的宽度,并且会得到A bound value cannot be set 异常。
我想一种解决方案可能是修改 ZoomableScrollPane 类以某种方式避免手动绑定的需要,但真的不知道该怎么做。
对此的任何帮助将不胜感激。
【问题讨论】:
-
@jewelsea 这根本不是关于缩放的。只是不知道如何自动调整组大小或如何在运行时增加绑定宽度。
标签: user-interface dynamic javafx javafx-8 autoresize