JavaFX LineChart mit Date-x-Achse

Diskutiere LineChart mit Date-x-Achse im AWT, Swing, JavaFX & SWT Bereich.
B

Bela B.

Servus zusammen,

ich bin gerade dabei, mit JavaFX eine Auswertesoftware für Temperaturverläufe zu schreiben. Dabei muss ich ein LineChart mit einer Datumsachse für die x-Achse verwenden.

In den zugrundeliegenden Daten-Klassen habe ich direkt java.time.LocalDateTime für die Zeitpunkte der einzelnen Temperaturwerte verwendet.
Jetzt will ich direkt das LocalDateTime für die x-Achse verwenden, allerdings gibt es bei der LineChart keine passende Achse.

In meinen alten Programme habe ich dafür ein Package im Internet gefunden, das mir eine DateAxis zur Verfügung stellt.
Der Name dieses Packages ist extfx, leider kann ich dazu aber im Internet nicht mehr etwas dazu finden.

Bei meinen neuen Programmen verwende ich richtigerweise Gradle und manage meine Dependencies entsprechend damit, nur gibt es eben kein Artifact von extfx.

Wie macht ihr ein Datumsbasiertes LineChart?
Oder wie soll ich nun mit diesem Package umgehen, da kein Artifact?
 
looparda

looparda

So?
XML:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<VBox xmlns="http://javafx.com/javafx"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="com.sample.ChartController">
    <LineChart prefHeight="600" fx:id="chart">
        <xAxis>
            <CategoryAxis label="Time"/>
        </xAxis>
        <yAxis>
            <NumberAxis label="Value"/>
        </yAxis>
    </LineChart>
</VBox>
Java:
public class ChartController {

    @FXML
    public LineChart<String, Double> chart;

    @FXML
    public void initialize() {

        final MesspunktProducer messpunktProducer = new MesspunktProducer();

        ObservableList<Series<String, Double>> data = observableArrayList();
        data.add(messpunktProducer.getSeries());
        chart.setData(data);

        new Thread(messpunktProducer).start();
    }

    private static class MesspunktProducer implements Runnable {
        private Series<String, Double> series;
        private ObservableList<Data<String, Double>> seriesData = observableArrayList();

        private MesspunktProducer() {
            series = new Series<>(seriesData);
        }

        @SneakyThrows
        @Override
        public void run() {
            while (true) {
                final Messpunkt messPunkt = new Messpunkt(randomValue(), now());
                Platform.runLater(() -> seriesData.add(new Data<>(String.valueOf(messPunkt.getTime()), messPunkt.getValue())));
                TimeUnit.SECONDS.sleep(1);
            }
        }

        private static double randomValue() {
            return ThreadLocalRandom.current().nextDouble(100.0);
        }

        private Series<String, Double> getSeries() {
            return series;
        }
    }
}
Java:
@Data
public class Messpunkt {
    private final Double value;
    private final LocalDateTime time;
}
 
Thema: 

LineChart mit Date-x-Achse

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben