I am new to Java and so to JavaFX. I am trying to build a dynamic graph which displays live data using JavaFx LineChart. I am using NumberAxis to set values for my X-Axis. I tried using both the constructors of NumberAxis and noticed that it automatically sets the X-Axis values as 1,2,3,4..etc.
我对Java和JavaFX都不熟悉。我正在尝试构建一个动态图,它使用JavaFx线图显示实时数据。我使用NumberAxis为x轴设置值。我试着同时使用了NumberAxis的构造函数,注意到它自动地将x轴值设置为1、2、3、4.等等。
But I want to display values in a different order like 1,3,4,5,2... and not in ascending order. Could someone please guide me in this regard ? Any help is very much appreciated. Thanks !
但是我想以不同的顺序显示值,比如1、3、4、5、2……不是按升序排列的。在这方面谁能指点我一下吗?非常感谢您的帮助。谢谢!
Here is how my code looks,
我的代码是这样的,
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;
}
}
Exception seen on using CategoryAxis,
使用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`