Я пытаюсь получить обновления AreaChart каждый раз, когда пользователь выбирает другой элемент из окна выбора, но что-то не так, и я не знаю, почему. Вот первое изображение, когда по умолчанию задано первое значение (все выглядит нормально): введите описание изображения здесь

И вот что происходит со столбцами чисел (Y), когда я меняю элемент поля со списком: введите описание изображения здесь

Вот код:

FXMLDocumentController.java

package javafxapplication17;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.XYChart;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;


public class FXMLDocumentController implements Initializable {

    @FXML
    private AreaChart fitimetChart;
    @FXML
    private ComboBox box;


    @Override
    public void initialize(URL url, ResourceBundle rb) {
        fitimetChart.getXAxis().setAutoRanging(true);
        fitimetChart.getYAxis().setAutoRanging(true);
        box.getItems().addAll("Viti Paraprak","Nentor");
        box.setValue("Viti Paraprak");
        fitimetBox();
    }    

    public void addFitimetNentorToChart()
    {

        double nje=10;
        double dy=0;
        double tre=20;
        double kater=0;
        double pes=2;
        double gjashte=0;
        double shtate=0;
        double tete=10;
        double nente=0;
        double dhjete=0;
        double njembedhjet=100;
        double dymbedhjet=120;
        double trembedhjet=40;
        double katermbedhjet=40;
        double pesembedhjet=80;
        double gjashtembedhjet=87;
        double shtatembedhjet=0;
        double tetembedhjet=0;
        double nentembedhjet=0;
        double njezet=0;
        double njezetenje=0;
        double njezetedy=0;
        double njezetetre=120;
        double njezetekater=0;
        double njezetepes=102;
        double njezetegjashte=0;
        double njezeteshtate=40;
        double njezetetete=50;
        double njezetenente=90;
        double tridhjete=0;


        XYChart.Series series = new XYChart.Series<>();
                series.setName("Selami Hasani");
                series.getData().add(new XYChart.Data("1", nje));
                series.getData().add(new XYChart.Data("2", dy));
                series.getData().add(new XYChart.Data("3", tre));
                series.getData().add(new XYChart.Data("4", kater));
                series.getData().add(new XYChart.Data("5", pes));
                series.getData().add(new XYChart.Data("6", gjashte));
                series.getData().add(new XYChart.Data("7", shtate));
                series.getData().add(new XYChart.Data("8", tete));
                series.getData().add(new XYChart.Data("9", nente));
                series.getData().add(new XYChart.Data("10", dhjete));
                series.getData().add(new XYChart.Data("11", njembedhjet));
                series.getData().add(new XYChart.Data("12", dymbedhjet));
                series.getData().add(new XYChart.Data("13", trembedhjet));
                series.getData().add(new XYChart.Data("14", katermbedhjet));
                series.getData().add(new XYChart.Data("15", pesembedhjet));
                series.getData().add(new XYChart.Data("16", gjashtembedhjet));
                series.getData().add(new XYChart.Data("17", shtatembedhjet));
                series.getData().add(new XYChart.Data("18", tetembedhjet));
                series.getData().add(new XYChart.Data("19", nentembedhjet));
                series.getData().add(new XYChart.Data("20", njezet));
                series.getData().add(new XYChart.Data("21", njezetenje));
                series.getData().add(new XYChart.Data("22", njezetedy));
                series.getData().add(new XYChart.Data("23", njezetetre));
                series.getData().add(new XYChart.Data("24", njezetekater));
                series.getData().add(new XYChart.Data("25", njezetepes));
                series.getData().add(new XYChart.Data("26", njezetegjashte));
                series.getData().add(new XYChart.Data("27", njezeteshtate));
                series.getData().add(new XYChart.Data("28", njezetetete));
                series.getData().add(new XYChart.Data("29", njezetenente));
                series.getData().add(new XYChart.Data("30", tridhjete));
                fitimetChart.getData().clear();
                fitimetChart.getData().add(series);
                fitimetChart.setTitle("Fitimet e Muajit Nentor");

    }

    public void addFitimetVjetoreToChart()
    {


        double janar=20;
        double shkurt=30;
        double mars=40;
        double prill=0;
        double maj=10;
        double qershor=100;
        double korrik=50;
        double gusht=12;
        double shtator=85;
        double tetor=0;
        double nentor=10;
        double dhjetor=50;



        XYChart.Series series = new XYChart.Series<>();
        series.setName("Selami Hasani");
        series.getData().add(new XYChart.Data("Janar", janar));
        series.getData().add(new XYChart.Data("Shkurt", shkurt));
        series.getData().add(new XYChart.Data("Mars", mars));
        series.getData().add(new XYChart.Data("Prill", prill));
        series.getData().add(new XYChart.Data("Maj", maj));
        series.getData().add(new XYChart.Data("Qershor", qershor));
        series.getData().add(new XYChart.Data("Korrik", korrik));
        series.getData().add(new XYChart.Data("Gusht", gusht));
        series.getData().add(new XYChart.Data("Shtator", shtator));
        series.getData().add(new XYChart.Data("Tetor", tetor));
        series.getData().add(new XYChart.Data("Nentor", nentor));
        series.getData().add(new XYChart.Data("Dhjetor", dhjetor));
                fitimetChart.getData().clear();
        fitimetChart.getData().add(series);

    }
    public void clearChart()
    {
        fitimetChart.getData().clear();
    }


    @FXML
    public void fitimetBox()
    {
        if(box.getSelectionModel().isSelected(0))
        {
            clearChart();
            addFitimetVjetoreToChart();
        }
        if(box.getSelectionModel().isSelected(1))
        {
            clearChart();
            addFitimetNentorToChart();
        }
    }

}

FXMLDocument.fxml

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

<?import javafx.scene.chart.AreaChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxapplication17.FXMLDocumentController">
   <center>
      <VBox alignment="CENTER" BorderPane.alignment="CENTER">
         <children>
            <ComboBox fx:id="box" onAction="#fitimetBox" prefWidth="150.0" />
            <AreaChart fx:id="fitimetChart" title="Fitimet">
              <xAxis>
                <CategoryAxis side="BOTTOM" />
              </xAxis>
              <yAxis>
                <NumberAxis side="LEFT" />
              </yAxis>
            </AreaChart>
         </children>
      </VBox>
   </center>
</BorderPane>

JavaFXApplication17.java

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class JavaFXApplication17 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }


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

}

P.s. Я сделал метод clearChart (), потому что, если я сначала не очищаю диаграмму, он просто продолжает писать новые XData после, не очищая первые.

Также возможно, что, когда пользователи нажимают на этот маленький кружок в верхней части каждой линейной диаграммы, чтобы показать числовое значение (Y)

0
Ertan Hasani 26 Ноя 2016 в 17:08

2 ответа

Лучший ответ

Мне просто нужно было обновить версию Java, и теперь все выглядит нормально.

1
Ertan Hasani 29 Ноя 2016 в 17:39

Что будет, если заменить:

public void clearChart()
{
    fitimetChart.getData().clear();
}

С участием:

public void clearChart()
{
    if(fittimeChart.getData().size() > 0)//check to see if the .size() part is correct. 
    {
        fitimetChart.getData().remove(0);
    }
}

Это результат, который я получил после запуска исходного кода с нулевыми изменениями:

enter image description here

enter image description here

0
Sedrick 29 Ноя 2016 в 16:29