• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Linechart nie wyświetla danych

0 głosów
161 wizyt
pytanie zadane 29 kwietnia 2019 w Java przez Kabuuz Bywalec (2,820 p.)

Cześć. Chciałem stworzyć w JavaFX wykres z losowymi danymi (dla testu) ale dane wcale się nie wyświetlają. Próbowałem dodawać dane w metodzie initialize() kontrolera ale to nic nie dało, podobnie przy użyciu przycisku, który miałby je tam po prostu wgrać i nie wiem co jest nie tak. Męczę się z tym już któryś dzień i nie mam pomysłu. 

Kod Kontrolera:

package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;

public class GraphController {

    @FXML
    private LineChart<Number, Number> chart;

    @FXML
    private Button btn;

    XYChart.Series series = new XYChart.Series();

    @FXML
    private void initialize() {
        NumberAxis xAxis=new NumberAxis();
        xAxis.setLabel("x");
        NumberAxis yAxis =new NumberAxis();
        yAxis.setLabel("y");

        chart=new LineChart<>(xAxis,yAxis);

        series.setName("Random Chart");
    }
    @FXML
    void click(ActionEvent event) {
        XYChart.Series series = new XYChart.Series();
        series.getData().add(new XYChart.Data(1970, 15));
        series.getData().add(new XYChart.Data(1980, 30));
        series.getData().add(new XYChart.Data(1990, 60));
        series.getData().add(new XYChart.Data(2000, 120));
        series.getData().add(new XYChart.Data(2013, 240));
        series.getData().add(new XYChart.Data(2014, 300));

        chart.getData().add(series);
    }
}

Kod fxml:

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

<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.LineChart?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.Pane?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.GraphController">
   <children>
      <LineChart fx:id="chart" prefHeight="400.0" prefWidth="600.0" title="Temperature Chart">
        <xAxis>
          <CategoryAxis side="BOTTOM" />
        </xAxis>
        <yAxis>
          <NumberAxis side="LEFT" />
        </yAxis>
      </LineChart>
      <Button fx:id="btn" layoutX="109.0" layoutY="14.0" mnemonicParsing="false" onAction="#click" text="Button" />
   </children>
</Pane>

 

1 odpowiedź

0 głosów
odpowiedź 30 kwietnia 2019 przez mbabane Szeryf (79,260 p.)

Dzieje się tak przez tę linię:

chart=new LineChart<>(xAxis,yAxis);

Tworzysz w ten sposób nową instancje wykresu, tzn. że w oknie masz inny wykres niż ten, który potem uzupełniasz w akcji przycisku.

Pierwszym krokiem jest usunięcie tej linii, ponieważ i tak wstrzykujesz instancje z FXML. I tutaj pojawi się kolejny problem, dlatego, że ustawiłeś jako oś X categoryAxis, która przyjmuje Stringi, a w metodzie click pchasz integery.

Podobne pytania

0 głosów
2 odpowiedzi 1,209 wizyt
–1 głos
1 odpowiedź 774 wizyt
+1 głos
1 odpowiedź 627 wizyt
pytanie zadane 3 marca 2022 w PHP przez AnimaVillis Stary wyjadacz (13,670 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...