2015-09-30 3 views
1

j'ai vu ce projet en réponse précédente et j'ai essayé de l'exécuter mais il n'a pas how to pass data from parsed text file and insert the values to ObservableList in javafx?pas d'erreur alors pourquoi ObservableList ne fonctionne pas dans ce projet?

données entrées du fichier texte à la vue de la table, puis piechart JavaFX, tout était travail, sauf le graphique que je suis en train de obtenir des données de vue table graphique, je l'ai fait après quelques modifications, je ne peux pas l'exécuter plus

le problème dans ObservableList pieChartData = FXCollections .observableArrayList()

c'est le code

package show; 
    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.nio.charset.StandardCharsets; 
    import java.nio.file.Files; 
    import java.nio.file.Path; 
    import java.nio.file.Paths; 
    import java.util.ArrayList; 
    import java.util.List; 
    import javafx.application.Application; 
    import javafx.beans.property.SimpleDoubleProperty; 
    import javafx.beans.property.SimpleIntegerProperty; 
    import javafx.beans.property.SimpleStringProperty; 
    import javafx.collections.FXCollections; 
    import javafx.collections.ObservableList; 
    import javafx.event.Event; 
    import javafx.event.EventHandler; 
    import javafx.scene.Group; 
    import javafx.scene.Scene; 
    import javafx.scene.chart.PieChart; 
    import javafx.scene.control.TableColumn; 
    import javafx.scene.control.TableView; 
    import javafx.scene.control.TableView.TableViewSelectionModel; 
    import javafx.scene.control.cell.PropertyValueFactory; 
    import javafx.scene.layout.VBox; 
    import javafx.stage.Stage; 

     public class show_TableView extends Application { 

     public TableView <Metrics> tableView = new TableView<Metrics>(); 
     private ObservableList<Metrics> dataList = FXCollections.observableArrayList(

     // /do something like this new Metrics(name,WMC,DIT,NOC ,CBO,RFC,LCOM , Ce, NPM), 
     // i want to add Metrics ADDED DYNAMICALLY after file is parsed 

     ); 

      ObservableList<PieChart.Data> pieChartData = FXCollections 
         .observableArrayList(
           new PieChart.Data("CBO", m.getCBO()), 
           new PieChart.Data("Ce", m.getCe()), 
           new PieChart.Data("DIT", m.getDIT()), 
           new PieChart.Data("LCOM", m.getLCOM()), 
           new PieChart.Data("NOC", m.getNOC()), 
           new PieChart.Data("NPM", m.getNPM()), 
           new PieChart.Data("WMC", m.getWMC())); 
       c.setData(pieChartData); 







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

    @Override 
    public void start(Stage primaryStage) { 

     primaryStage.setTitle("java-buddy.blogspot.com"); 
     Group root = new Group(); 

     TableColumn name = new TableColumn("name"); 
     name.setCellValueFactory(new PropertyValueFactory<Metrics, String>(
       "name")); 

     TableColumn WMCCol = new TableColumn("WMC"); 
     WMCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "WMC")); 

     TableColumn DITCol = new TableColumn("DIT"); 
     DITCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "DIT")); 

     TableColumn NOCCol = new TableColumn("NOC"); 
     NOCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "NOC")); 
     TableColumn CBOCol = new TableColumn("CBO"); 
     CBOCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "CBO")); 
     TableColumn RFCCol = new TableColumn("RFC"); 
     RFCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "RFC")); 
     TableColumn LCOMCol = new TableColumn("LCOM"); 
     LCOMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "LCOM")); 
     TableColumn ceCol = new TableColumn("Ca"); 
     ceCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "ce")); 
     TableColumn NPMCol = new TableColumn("NPM"); 
     NPMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
       "NPM")); 

     primaryStage.setScene(new Scene(root, 200, 200)); 
     primaryStage.show(); 

     List<Metrics> metric = readMetricFromCSV("C:\\Users\\pavi\\Desktop\\11.txt"); 
     // let's print all the metric read from CSV file 
     for (Metrics m : metric) { 
      System.out.println(m); 

     } 

     tableView.setItems(FXCollections.observableArrayList(metric)); 
     tableView.getColumns().addAll(name, WMCCol, DITCol, NOCCol, CBOCol, 
       RFCCol, LCOMCol, ceCol, NPMCol); 

     VBox vBox = new VBox(); 
     vBox.setMaxSize(600, 600); 
     vBox.setSpacing(10); 
     PieChart c = new PieChart(); 
     tableView.setOnMouseClicked(new EventHandler<Event>() { 

      @Override 
      public void handle(Event event) { 
       c.setData(FXCollections.emptyObservableList()); 
       TableViewSelectionModel<Metrics> tableViewSelectionModel = tableView 
         .selectionModelProperty().get(); 
       Metrics m = tableViewSelectionModel.getSelectedItem(); 
       if(m==null){ 
        return; 
       } 
       ObservableList<PieChart.Data> pieChartData = FXCollections 
         .observableArrayList(
           new PieChart.Data("CBO", m.getCBO()), 
           new PieChart.Data("Ce", m.getCe()), 
           new PieChart.Data("DIT", m.getDIT()), 
           new PieChart.Data("LCOM", m.getLCOM()), 
           new PieChart.Data("NOC", m.getNOC()), 
           new PieChart.Data("NPM", m.getNPM()), 
           new PieChart.Data("WMC", m.getWMC())); 
       c.setData(pieChartData); 
      } 
     }); 
     vBox.getChildren().add(tableView); 
     vBox.getChildren().add(c); 

     root.getChildren().add(vBox); 

    } 

    public List<Metrics> readMetricFromCSV(String fileName) { 

     List<Metrics> metricsss = new ArrayList<>(); 

     Path pathToFile = Paths.get(fileName); 
     // create an instance of BufferedReader 
     // using try with resource, Java 7 feature to close resources 
     try (BufferedReader br = Files.newBufferedReader(pathToFile, 
       StandardCharsets.US_ASCII)) { 
      // read the first line from the text file 
      String line = br.readLine(); 
      while (line != null && !line.isEmpty()) { // loop until all lines 
                 // are read 
       String[] attributes = line.split(" "); // the file, using a 
                 // comma as the 
                 // delimiter 
       Metrics valueOfMetric = createMetric(attributes); 
       metricsss.add(valueOfMetric); // adding metric into ArrayList 
       // skip empty line 
       // line.isEmpty() || line.trim().equals("") || 
       // line.trim().equals("\n")) 
       br.readLine(); 
       line = br.readLine(); 
      } 

     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 

     return metricsss; 
    } 
      private Metrics createMetric(String[] metadata) { 
      String name = metadata[0]; 
      int WMC = Integer.parseInt(metadata[1]); 
      int DIT = Integer.parseInt(metadata[2]); 
      int NOC = Integer.parseInt(metadata[3]); 
      int CBO = Integer.parseInt(metadata[4]); 
      int RFC = Integer.parseInt(metadata[5]); 
      int LCOM= Integer.parseInt(metadata[6]); 
      int Ce = Integer.parseInt(metadata[7]); 
      int NPM = Integer.parseInt(metadata[8]); 
      return new Metrics(name,WMC,DIT,NOC,CBO,RFC,LCOM,Ce,NPM);//,cc 
     } 


      public class Metrics { 

      private String name; 
      private int WMC; 
      private int DIT; 
      private int NOC; 
      private int CBO; 
      private int RFC; 
      private int LCOM; 
      private int Ce; 
      private int NPM; 

      public Metrics(String name,int WMC,int DIT,int NOC,int CBO,int RFC,int LCOM, int Ce, int NPM) { 

       this.name = name; 
       this.WMC = WMC; 
       this.DIT = DIT; 
       this.NOC = NOC; 
       this.CBO = CBO; 
       this.RFC = RFC; 
       this.LCOM = LCOM; 
       this.Ce = Ce; 
       this.NPM = NPM; 
      } 

      public String getName() { 
       return name; 
      } 

      public void setName(String name) { 
       this.name = name; 
      } 

      public int getWMC() { 
       return WMC; 
      } 

      public void setWMC(int WMC) { 
       this.WMC = WMC; 
      } 

      public int getDIT() { 
       return DIT; 
      } 

      public void setDIT(int DIT) { 
       this.DIT = DIT; 
      } 

      public int getNOC() { 
       return NOC; 
      } 

      public void setNOC(int NOC) { 
       this.NOC = NOC; 
      } 

      public int getCBO() { 
       return CBO; 
      } 

      public void setCBO(int CBO) { 
       this.CBO = CBO; 
      } 

      public int getRFC() { 
       return RFC; 
      } 

      public void setRFC(int RFC) { 
       this.RFC = RFC; 
      } 

      public int getLCOM() { 
       return LCOM; 
      } 

      public void setLCOM(int LCOM) { 
       this.LCOM = LCOM; 
      } 

      public int getCe() { 
       return Ce; 
      } 

      public void setCe(int ce) { 
       Ce = ce; 
      } 

      public int getNPM() { 
       return NPM; 
      } 

      public void setNPM(int NPM) { 
       this.NPM = NPM; 
      } 


     } 




     } 

contenu du fichier texte

gr.spinellis.ckjm.ClassVisitor 13 2 0 14 74 34 2 9 

    gr.spinellis.ckjm.ClassMetricsContainer 3 1 0 3 18 0 2 2 

    gr.spinellis.ckjm.MetricsFilter 7 1 0 6 30 11 2 5 

    gr.spinellis.ckjm.PrintPlainResults 2 1 0 2 8 0 1 2 

    gr.spinellis.ckjm.MethodVisitor 11 2 0 21 40 0 1 8 

    gr.spinellis.ckjm.CkjmOutputHandler 1 1 0 1 1 0 3 1 

Répondre

3

Pas de problème avec ObservableList pieChartData = FXCollections .observableArrayList() Ceci est un arryList vide. enter image description here

@Override 
public void start(Stage primaryStage) { 

    primaryStage.setTitle("java-buddy.blogspot.com"); 
    VBox root = new VBox(); 

    TableColumn name = new TableColumn("name"); 
    name.setCellValueFactory(new PropertyValueFactory<Metrics, String>(
      "name")); 

    TableColumn WMCCol = new TableColumn("WMC"); 
    WMCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "WMC")); 

    TableColumn DITCol = new TableColumn("DIT"); 
    DITCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "DIT")); 

    TableColumn NOCCol = new TableColumn("NOC"); 
    NOCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "NOC")); 
    TableColumn CBOCol = new TableColumn("CBO"); 
    CBOCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "CBO")); 
    TableColumn RFCCol = new TableColumn("RFC"); 
    RFCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "RFC")); 
    TableColumn LCOMCol = new TableColumn("LCOM"); 
    LCOMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "LCOM")); 
    TableColumn ceCol = new TableColumn("Ca"); 
    ceCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "ce")); 
    TableColumn NPMCol = new TableColumn("NPM"); 
    NPMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
      "NPM")); 

    primaryStage.setScene(new Scene(root)); 
    primaryStage.show(); 

    List<Metrics> metric = readMetricFromCSV("C:\\Users\\pavi\\Desktop\\11.txt"); 
    // let's print all the metric read from CSV file 
    for (Metrics m : metric) { 
     System.out.println(m); 

    } 

    tableView.setItems(FXCollections.observableArrayList(metric)); 
    tableView.getColumns().addAll(name, WMCCol, DITCol, NOCCol, CBOCol, 
      RFCCol, LCOMCol, ceCol, NPMCol); 

    VBox vBox = new VBox(); 

    vBox.setSpacing(10); 
    PieChart c = new PieChart(); 
    tableView.setOnMouseClicked(new EventHandler<Event>() { 

     @Override 
     public void handle(Event event) { 
      c.setData(FXCollections.emptyObservableList()); 
      TableViewSelectionModel<Metrics> tableViewSelectionModel = tableView 
        .selectionModelProperty().get(); 
      Metrics m = tableViewSelectionModel.getSelectedItem(); 
      if (m == null) { 
       return; 
      } 
      ObservableList<PieChart.Data> pieChartData = FXCollections 
        .observableArrayList(
          new PieChart.Data("CBO", m.getCBO()), 
          new PieChart.Data("Ce", m.getCe()), 
          new PieChart.Data("DIT", m.getDIT()), 
          new PieChart.Data("LCOM", m.getLCOM()), 
          new PieChart.Data("NOC", m.getNOC()), 
          new PieChart.Data("NPM", m.getNPM()), 
          new PieChart.Data("WMC", m.getWMC())); 
      c.setData(pieChartData); 
     } 
    }); 
    HBox boxc = new HBox(); 
    vBox.prefWidthProperty().bind(root.prefWidthProperty()); 
    boxc.setManaged(true); 
    boxc.getChildren().addAll(tableView, c); 
    vBox.getChildren().add(boxc); 

    root.getChildren().add(vBox); 

} 

J'espère que cela résoudra votre problème