JavaFX LineChart 手动设置 X 轴值

标签 java javafx

我是 Java 的新手,也是 JavaFX 的新手。我正在尝试构建一个使用 JavaFx LineChart 显示实时数据的动态图。我正在使用 NumberAxis 为我的 X 轴设置值。我尝试同时使用 NumberAxis 的构造函数并注意到它会自动将 X 轴值设置为 1、2、3、4..等。

但我想以不同的顺序显示值,例如 1,3,4,5,2...,而不是按升序。有人可以在这方面指导我吗?很感谢任何形式的帮助。谢谢 !

这是我的代码的样子,

public class UI extends Application{

@SuppressWarnings("unchecked")
public static XYChart.Series series = new XYChart.Series();
public static XYChart.Series series1 = new XYChart.Series();


/**
 * @param args
 */ 


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

@Override 
public void start(Stage primaryStage) throws Exception {
    BorderPane border = new BorderPane();
    //HBox hbox = addHBox();
    border.setTop(addHBox());
    border.setCenter(addLineChart());

    Scene scene = new Scene(border);

    primaryStage.setScene(scene);
    primaryStage.setHeight(570);
    primaryStage.setWidth(700);
    //primaryStage.setResizable(false);
    primaryStage.centerOnScreen();


    //primaryStage.setFullScreen(true);


    primaryStage.show();
}

public HBox addHBox() {
    HBox hbox = new HBox();
    hbox.setStyle("-fx-background-color: #e6e6fa;");//d3d3d3 gray, f5f5f5 smoke white


    hbox.setPadding(new Insets(0, 0, 0, 560));
    hbox.setSpacing(10);

    hbox.setMaxWidth(10);
    hbox.setStyle("-fx-background-color: #e6e6fa;");//d3d3d3 gray, f5f5f5 smoke white

    //Label logoLabel = new Label();
    Image logoImage = new Image(getClass().getResourceAsStream("Logo.jpeg"));       
    ImageView logoImageViewer = new ImageView();        
    //Rectangle2D viewportRect = new Rectangle2D(40, 35, 110, 110);
    //logoImageViewer.setViewport(viewportRect);

    logoImageViewer.setImage(logoImage);        
    logoImageViewer.setPreserveRatio(true);
    logoImageViewer.setSmooth(true);
    logoImageViewer.setCache(true);

    hbox.getChildren().add(logoImageViewer);
    return hbox;
}



public Node addLineChart(){

    //final NumberAxis xAxis = new NumberAxis(1,10,1);      
    final CategoryAxis xAxis = new CategoryAxis();

    xAxis.setAutoRanging(false);


    final NumberAxis yAxis = new NumberAxis(-80,60,20);        
    yAxis.setMinorTickVisible(false);




    final LineChart<String,Number> lineChart = new LineChart<String,Number>(xAxis,yAxis);




    //populating the series with data
    series.getData().add(new XYChart.Data("1", 20.222222222));//Math.random()));
    series.getData().add(new XYChart.Data("3", 0));//Math.random()));
    series.getData().add(new XYChart.Data("4", 1));//Math.random()));
    series.getData().add(new XYChart.Data("2", -60.11111));//Math.random()));

    lineChart.getData().add(series);
    lineChart.setLegendVisible(false);

    return lineChart;
}

}

使用 CategoryAxis 时出现异常,

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start    method
     at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403)
     at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
     at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
     at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at javafx.scene.chart.Axis.layoutChildren(Axis.java:634)
    at javafx.scene.Parent.layout(Parent.java:1018)
    at javafx.scene.chart.XYChart.layoutChartChildren(XYChart.java:684)
    at javafx.scene.chart.Chart$1.layoutChildren(Chart.java:84)
    at javafx.scene.Parent.layout(Parent.java:1018)
    at javafx.scene.Scene.layoutDirtyRoots(Scene.java:513)
    at javafx.scene.Scene.doLayoutPass(Scene.java:484)
    at javafx.scene.Scene.preferredSize(Scene.java:1485)
    at javafx.scene.Scene.impl_preferredSize(Scene.java:1512)
    at javafx.stage.Window$10.invalidated(Window.java:719)
    at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:127)
    at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:161)
    at javafx.stage.Window.setShowing(Window.java:782)
    at javafx.stage.Window.show(Window.java:797)
    at javafx.stage.Stage.show(Stage.java:229)
    at com.bosch.mvci.ford.powerbalance.ui.UI.start(UI.java:184)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:206)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:173)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
... 1 more`

最佳答案

使用 CategoryAxis为你的 x 轴。

关于JavaFX LineChart 手动设置 X 轴值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947170/

相关文章:

java - Android 以编程方式更新 apk

javafx - 如何在 stackedbarchart/barchart 中仅显示 Y number aexis 中的整数

java - 删除 JFX 中选项卡后面的灰色背景

JavaFX:如何为 Pane 创建幻灯片动画效果(在透明舞台内)

JavaFX Java 在 Controller 之间传递参数字符串

java - 为什么这个Java程序会导致内存泄漏?

java - PHP Java 组合进行多线程处理 - 好还是坏?

java - PostgreSQL, hibernate : Default increase sequence length by 1

JAVA:如果捕获到错误,处理错误时是否会执行错误后出现的try block 中的代码?

java - 如何抑制 log4j2 中的重复消息