【问题标题】:Adjusting Height,Width of JavaFX Chart调整 JavaFX 图表的高度、宽度
【发布时间】:2012-10-26 01:16:08
【问题描述】:

我是 Java 新手,具有 PHP、HTML、CSS 经验。当我尝试更改我的图表在窗口中占用的宽度和高度时,NetBeans 给了我错误:

错误:setWidth(double) 在 Region chart.setWidth(450) 中具有受保护的访问权限;

我搜索了 javafx 文档,发现宽度/高度绑定到区域,但我不确定我的代码中是什么,我尝试了一些方法但没有找到...

我相信这很简单..

提前谢谢,布拉德。

package test;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.shape.Rectangle;

public class Test extends Application {



    private void init(Stage primaryStage) {
        Group root = new Group();
        primaryStage.setScene(new Scene(root,1000,1000));

        root.getStylesheets().add("test/Chart.css");

        Rectangle rect = new Rectangle(35,70); 
        rect.setLayoutX(30); 
        rect.setLayoutY(30);
        rect.getStyleClass().add("my-rect");

        NumberAxis xAxis = new NumberAxis("X Axis", -24d, 24.0d, 2.0d);
        NumberAxis yAxis = new NumberAxis("Y Axis", -24.0d, 24.0d, 1.0d);

        ObservableList<XYChart.Series> data = FXCollections.observableArrayList(
            new ScatterChart.Series("Series 1", FXCollections.<ScatterChart.Data>observableArrayList(
                new XYChart.Data(0.2, 3.5),
                new XYChart.Data(0.7, 4.6),
                new XYChart.Data(1.8, 1.7),
                new XYChart.Data(2.1, 2.8),
                new XYChart.Data(4.0, 2.2),
                new XYChart.Data(4.1, 2.6),
                new XYChart.Data(4.5, 2.0),
                new XYChart.Data(6.0, 3.0),
                new XYChart.Data(7.0, 2.0),
                new XYChart.Data(7.8, 4.0)
            )),
            new ScatterChart.Series("Series 2", FXCollections.<ScatterChart.Data>observableArrayList(
                new XYChart.Data(6.2,3.0),
                new XYChart.Data(6.0,4.0),
                new XYChart.Data(5.8,5.0)
            ))    
        );
        ScatterChart chart = new ScatterChart(xAxis, yAxis, data);
        chart.setWidth(450);
        chart.setHeight(450);

        chart.setLayoutX(250);
        chart.setLayoutY(250);



        root.getChildren().addAll(chart,rect);
    }

    @Override public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
    }
    public static void main(String[] args) { launch(args); }
}

【问题讨论】:

    标签: charts height width javafx


    【解决方案1】:

    ScatterChart.getHeight()(又是 Region.getHeight())的 javadoc 说

    获取属性高度的值。
    物业说明:
    这个可调整大小的节点的高度。该属性由区域的 布局期间的父级,可能不会由应用程序设置。如果 应用程序需要显式控制区域的大小,它 应通过设置 minHeight 覆盖其首选尺寸范围, prefHeightma​​xHeight 属性。

    也就是说,您可以调整和限制任何图表的大小:

    ScatterChart.setPrefHeight(double)
    ScatterChart.setMinHeight(double)
    ScatterChart.setMaxHeight(double)
    
    ScatterChart.setPrefWidth(double)
    ScatterChart.setMinWidth(double)
    ScatterChart.setMaxWidth(double)
    
    ScatterChart.setPrefSize(double, double)
    ScatterChart.setMinSize(double, double)
    ScatterChart.setMaxSize(double, double)
    

    【讨论】:

    • 有没有办法将 Chart 的高度绑定到另一个,这样当 Chart A 缩放时, chart B 自动缩放?
    • @SDS,是的,试试 chartB.prefHeightProperty().bind(chartA.heightProperty());
    • @UlukBiy prefHeight 并不总是强制它。我正在寻找一种始终强制的绑定。例如:ChartB 应该始终是 ChartA 高度(以像素为单位)的 1/3。我试过 chartB.prefHeightProperty().bind(chartA.heightProperty().multiply(0.333)); chartB.minHeightProperty().bind(chartA.heightProperty().multiply(0.333)); chartB.maxHeightProperty().bind(chartA.heightProperty().multiply(0.333));这似乎非常接近,但并不完美。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多