微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javafx 表格和折线图

如何解决Javafx 表格和折线图

我想用表格中的数据制作一个表格和一个折线图。我已经创建了一个表格和一个折线图,但我不知道如何组合它们。这就是我的表格的外观,但我需要一个包含 Observablelist 数据的折线图。我需要知道如何将表格列中的两个数据添加到折线图中。

package application;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;

public class Tabelle extends Application {

    private TableView<Werte> tView = new TableView<Werte>();                    //Tabelle wird erstellt mit dem Datentyp "Werte" 

    @SuppressWarnings("unchecked")
    @Override
    public void start(Stage stage) {
        stage.setTitle("GPS-Maus");                                             //Titel="GPS-Maus"
        stage.setWidth(800);                                                    //Breite des Fensters auf 800
        stage.setHeight(300);                                                   //Höhe des Fensters auf 300

        tView.setEditable(true);
        
        //Columns werden erstellt        
        //Quality Column
        TableColumn<Werte,Integer> qualityCol = new TableColumn<Werte,Integer>("quality");        
        qualityCol.setCellValueFactory((p) -> {
            return p.getValue().qualityproperty().asObject();
        });
        qualityCol.prefWidthproperty().bind(tView.widthproperty().multiply(0.2));
        
        //numberOfSatellites Column
        TableColumn<Werte,Integer> numberOfSatellitesCol = new TableColumn<Werte,Integer>("numberOfSatellites");
        numberOfSatellitesCol.setCellValueFactory((p) -> {
            return p.getValue().numberOfSatellitesproperty().asObject();
        });
        numberOfSatellitesCol.prefWidthproperty().bind(tView.widthproperty().multiply(0.2));
        
        
        //Latitude Column
        TableColumn<Werte,Double> latitudeCol = new TableColumn<Werte,Double>("latitude");
        latitudeCol.setCellValueFactory((p) -> {
            return p.getValue().latitudeproperty().asObject();
        });
        latitudeCol.prefWidthproperty().bind(tView.widthproperty().multiply(0.3));
                
        //Altitude Column
        TableColumn<Werte,Double> altitudeCol = new TableColumn<Werte,Double>("altitude");
        altitudeCol.setCellValueFactory((p) -> {
            return p.getValue().altitudeproperty().asObject();
        });
        altitudeCol.prefWidthproperty().bind(tView.widthproperty().multiply(0.3));
        
        //Longitude Column
        TableColumn<Werte,Double> longitudeCol = new TableColumn<Werte,Double>("longitude");
        longitudeCol.setCellValueFactory((p) -> {
            return p.getValue().longitudeproperty().asObject();
        });
        longitudeCol.prefWidthproperty().bind(tView.widthproperty().multiply(0.3));
        
        //a Column
        TableColumn<Werte,Double> aCol = new TableColumn<Werte,Double>("a");
        aCol.setCellValueFactory((p) -> {
            return p.getValue().aproperty().asObject();
        });
        aCol.prefWidthproperty().bind(tView.widthproperty().multiply(0.3));
        
        //Die Header werden definiert
        tView.getColumns().addAll(qualityCol,numberOfSatellitesCol,latitudeCol,altitudeCol,longitudeCol,aCol);

        tView.setItems(inhaltListe());                              //Den Zellen werden die Werte von der erstellten ObservableList übergeben
        Scene scene = new Scene(tView);                             //Scene ist der Container
        stage.setScene(scene);                                      //stage ist der top level JavaFX container
        stage.show();
    }

    private ObservableList<Werte> inhaltListe() {                                    // Methode wird erstellt,welche eine ObservableList zurück erwartet. Name der Methode ist "inhaltListe"
        final ObservableList<Werte> werte = FXCollections.observableArrayList(          //ObservableList wird erstellt um den Attributen aus dem Object "Werte" Werte zuzuordnen. Name ist "werte". ObservableList die hier verwendet wird,ist observableArrayList,da sich dieser am besten für Objects anbietet.
                new Werte(1,2,3,4,5,6),//"Werte" wird mit Beispielzahlen gefüllt 
                new Werte(7,8,9,10,11,12),new Werte(13,14,15,16,17,18),new Werte(19,20,21,22,23,24),new Werte(25,26,27,28,29,30));
        return werte;
    }

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

解决方法

您需要创建两个 NumberAxis,一个用于 X 轴,另一个用于 Y 轴,然后是一个 XYChart.Series 对象。

看一下oracle官方关于折线图的教程:https://docs.oracle.com/javafx/2/charts/line-chart.htm

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。