1

我有一个问题,当我将数据添加到类别轴并且之前使用过轴标题时,顺序被搞砸了。运行下面的简单应用程序并在图表上单击两次并查看 x 轴以了解我的意思。数据从第 0 个月到第 10 个月提供给图表,但以另一种顺序显示。有什么帮助吗?

package testCategoryBug;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.XYChart.Data;
import javafx.scene.chart.XYChart.Series;
import javafx.scene.input.MouseEvent;

public class TestCategoryBug extends Application {
    static Boolean even=true;
    @Override public void start(Stage stage) {
        stage.setTitle("Test Category Bug");    
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        xAxis.setLabel("Month");       

        final LineChart<String,Number> lineChart = new LineChart<String,Number>(xAxis, yAxis);       
        lineChart.setTitle("Stock Monitoring, 2010");     

        // Initialize some data for plotting.
        final Series<String, Number> plottablePairs  = new Series<String, Number>();
        final Series<String, Number> plottablePairs2 = new Series<String, Number>();
        for (int i = 0; i < 10; i++) {
            Data<String,Number> pair= new Data<String,Number>("Month "+i,10.0*i);
            plottablePairs.getData().add(pair);
        }
        for (int i = 5; i < 10; i++) {
            Data<String,Number> pair= new Data<String,Number>("Month "+i,100.0-10*i);
            plottablePairs2.getData().add(pair);
        }

        // add the first of the series
        final ObservableList<XYChart.Series<String, Number>> chartData=FXCollections.observableArrayList();;
        chartData.add(plottablePairs);
        lineChart.setData(chartData);

        // now on a mouse click, swap the data.  Click twice and see what happens
        lineChart.addEventHandler(MouseEvent.MOUSE_CLICKED,new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                chartData.clear();
                if (even) {
                    chartData.add(plottablePairs2);
                } else {
                    chartData.add(plottablePairs);
                    // note that after this, the axis is screwed up.
                }
                lineChart.setData(chartData);
                even=!even;
            }
        });

        // Put up the scene
        Scene scene  = new Scene(lineChart,800,600);
        stage.setScene(scene);
        stage.show();
    }

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

2 回答 2

0

适合我使用FX8 开发者版本。您可能想要升级。

图表的轴排序问题很少,例如RT-23094,但它们都已在 FX8 中修复。

于 2013-07-15T12:43:09.100 回答
0

我有同样的问题。无论我如何设置绘图,排序总是会因为重新绘制新的数据点而变得混乱。唯一的修复是使用 java 1.8。

这是当时最新的 fx 2.2.51-b13。必须使用 fx8 早期访问版本。

于 2014-02-05T18:23:41.870 回答