查找图表组件的大小和相对位置以及图表的边界

Finding the size and relative position of a chart's components w.r.t. chart's bounds

提问人:Keen Teen 提问时间:11/17/2023 更新时间:11/17/2023 访问量:23

问:

我正在使用 JavaFX 编写代码,其中有多个图表(例如 s 或 s),每个图表都位于不同的位置。用户必须能够修改图表数据、在图表上拖动绘图区域、更改刻度标签和长度、定义轴、标题或图例的标签,以及更改任何图表组件的颜色。在每次操作时,都需要任何图表组件(例如绘图区域、轴、图例、标签、标题或刻度线)相对于图表边界的相对位置进行进一步处理。从视觉上讲,我希望在以下给定的图表中找到红色和绿色矩形的位置和大小:LineChartScatterChartAnchorPane

enter image description here

以下两个代码片段无法给出准确的结果:

代码 1

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Region;
import javafx.stage.Stage;
public class Test8 extends Application {
    @Override
    public void start(Stage stage) {

        AnchorPane anchorPane=new AnchorPane();

        Scene scene=new Scene(anchorPane,600,400);

        stage.setScene(scene);

        stage.show();

        LineChart<Number,Number> lineChart=new LineChart<>(new NumberAxis(),new NumberAxis());

        Region region= (Region) lineChart.lookup(".chart-plot-background");

        anchorPane.getChildren().add(lineChart);

        System.out.println(region.getBoundsInParent());

    }
    public static void main(String[] args) {
        launch();
    }


}

输出:BoundingBox [minX:0.0, minY:0.0, minZ:0.0, width:0.0, height:0.0, depth:0.0, maxX:0.0, maxY:0.0, maxZ:0.0]

代码 2

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Region;
import javafx.stage.Stage;
public class Test8 extends Application {
    @Override
    public void start(Stage stage) {

        AnchorPane anchorPane=new AnchorPane();

        Scene scene=new Scene(anchorPane,600,400);

        stage.setScene(scene);

        LineChart<Number,Number> lineChart=new LineChart<>(new NumberAxis(),new NumberAxis());

        Region region= (Region) lineChart.lookup(".chart-plot-background");

        anchorPane.getChildren().add(lineChart);

        stage.show();

        System.out.println(region.getBoundsInParent());

    }
    public static void main(String[] args) {
        launch();
    }


}

输出:BoundingBox [minX:38.0, minY:10.0, minZ:0.0, width:443.0, height:346.0, depth:0.0, maxX:481.0, maxY:356.0, maxZ:0.0]

这两个代码段之间的唯一区别是命令的位置。stage.show()

问题

当图表驻留在 ?上面的两个代码片段是可修改的,还是我需要不同的方法?AnchorPane

爪哇 JavaFX

评论

2赞 James_D 11/17/2023
“在每次操作时,任何图表组件的相对位置......是需要的”。如果布局几何图形仅在用户操作时需要,那么您不能在用户执行操作时计算它们吗?这必然是在执行布局之后进行的,因此等同于第二个代码示例,它给出了正确的结果。(目前还不清楚为什么你真的需要这些东西;如果你更改了你列出的任何属性,那么图表应该只是更新并处理它自己的布局。
0赞 Keen Teen 11/21/2023
我正在编写一个应用程序,用户可以在其中选择从其菜单中添加新的折线图并将其放在主画布上。用户必须能够自定义图表,如问题中所述。最后,应将用户定义的图表集导出为 pdf 或 tex 文件(这是我需要对图表组件进行处理的地方)。

答: 暂无答案