2015-09-29 1 views
-1

содержания текстового файлакак передать данные из разобранного текстового файла и вставить значения в ObservableList в javafx?

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 

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

синтаксические работает хорошо, теперь я хочу, чтобы положить значения я получаю от текста файл в TableView.

это мой код

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; 
      } 


     } 




     } 
+0

@James_D основная проблема заключается в том, чтобы вставить значение частного ObservableList < Metrics > DataList = FXCollections.observableArrayList() – mdsavs

+0

'tableView.getItems(). AddAll (метрика)' Безразлично Работа? (Или просто 'dataList.addAll (metric)'?) –

+0

Нет, это не сработало @James_D – mdsavs

ответ

0

enter image description here

Pie Chart java example

tableView.setItems(FXCollections.observableArrayList(metric));//added 

Я добавил выше строку кода для создания observaleList с помощью списка

br.readLine();//removed here this read extraline 
String line1=null; 
// read the first line from the text file 
String line = br.readLine();     
while (line != null) { 

выше состояние изношенg что если линия пуста? Я изменил это тоже (жаль не explaing я не знаю, что много английских)

@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; 
} 

для диаграмм нам нужно создать набор данных pieChart.setData (pieChartData). Reff т.п. ниже изображения вы поймете

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); 
+0

но почему я не могу сделать то же самое для круговой диаграммы tableView.getItems(). AddAll (metric); pieChart.getItems(). AddAll (metric); – mdsavs

+0

Как я могу отображать данные каждой строки в круговой диаграмме, когда она выбрана? – mdsavs

+0

Большое спасибо, у меня есть небольшая проблема, когда я компилирую исходный код, который ObservableList не работает в этом проекте ?! – mdsavs

Смежные вопросы