【问题标题】:JavaFX Auto Resizing GroupJavaFX 自动调整大小组
【发布时间】: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);
}

问题是我在这里遇到了冲突。因为LineChartGroup(不是窗格)的子级,我只知道一种可调整大小的方法,那就是手动绑定其宽度 与根@ 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


【解决方案1】:

您可以检测一个属性是否已绑定,然后在操作之前取消绑定:

if (content.prefWidthProperty().isBound()) {
    content.prefWidthProperty().unbind();
}
...

大概当您放大图表并调整窗口大小时,内容已经大于视口,因此在窗口大小调整到超出放大后的大小之前,不应强制更改宽度图表?

鉴于您拥有的不同条件,您最好监控 BorderPane/ListView 的大小,并在发生变化时调整需要它的图表的大小。

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2018-07-05
    • 2013-01-17
    • 2014-08-15
    • 1970-01-01
    相关资源
    最近更新 更多