修复X和Y轴宽度,JavaFX

时间:2014-08-11 18:49:50

标签: javafx javafx-2

如何使用JavaFx折线图获得固定的轴宽度。

import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.stage.Stage;

public class Axis extends Application
{

    private Timeline animation;

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

    @Override
    public void start(final Stage stage) throws Exception
    {
        final NumberAxis x = new NumberAxis();
        final NumberAxis y = new NumberAxis();
        x.setAutoRanging(false);
        y.setAutoRanging(false);

        final LineChart<Number, Number> lineChart = new LineChart<Number, Number>(x, y);
        // final Series series = new LineChart.Series<Number, Number>();
        //
        // series.getData().add(new XYChart.Data(20, 23));
        // series.getData().add(new XYChart.Data(35, 14));
        // series.getData().add(new XYChart.Data(43, 15));
        // series.getData().add(new XYChart.Data(60, 24));
        // series.getData().add(new XYChart.Data(10, 34));
        //
        // lineChart.getData().add(series);
        lineChart.setPrefHeight(10);
        lineChart.setPrefWidth(10);
        lineChart.setMinHeight(10);
        lineChart.setMinWidth(10);
        lineChart.setMaxHeight(10);
        lineChart.setMaxWidth(10);

        final Scene scene = new Scene(lineChart, 800, 800);
        stage.setScene(scene);
        stage.show();

    }

    @Override
    public void stop()
    {
        animation.pause();
    }
}

enter image description here

当我调整窗口大小时,我希望网格(标记为红色的样本)不会缩放。目前,当调整窗口大小时网格会调整大小,如下所示

enter image description here

我无法使用minWidth和maxWidth API

实现我需要的功能

1 个答案:

答案 0 :(得分:2)

防止调整图表大小

您可以通过设置首选,最小和最大尺寸来阻止图表调整大小:

lineChart.setMinSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE);
lineChart.setPrefSize(800, 600);
lineChart.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE);

唯一的例外是当图表是场景的根时,在这种情况下,您应该将图表包装在窗格或组中,以防止它被调整大小以适应场景(因为JavaFX中的布局怪癖) 8渲染逻辑)。

另请注意,包装任何可调整大小的节点,Group会将节点(不包括转换和效果)调整为其首选尺寸,并且永远不会更改它们。

不幸的是,设置图形的首选大小与直接设置图形轴的首选大小完全相同,因为它使整个图表的大小,而不是特定的轴线,这可能是你正在寻找的问题。

防止调整图表轴的大小

我不知道该怎么做。

您可能认为可以执行以下操作:

xAxis.setMinWidth(Control.USE_PREF_SIZE);
xAxis.setPrefWidth(800);
xAxis.setMaxWidth(Control.USE_PREF_SIZE);

但是当轴嵌入图表中时,这在Java 8中不起作用。这是因为XYChart布局例程在布置图表内容时忽略了它的轴的首选,最小和最大尺寸。

这可能是一个错误,因此您可能希望在https://javafx-jira.kenai.com处将其记录下来。