0

我在用值填充 tableview 时遇到问题。我尝试了JavaFX TableView 动态列和数据值的解决方案, 但这对我不起作用。这是代码。如果有人知道如何解决这个问题,那就太好了。

public class CSVTableViewer extends Application {

private String allColumns;
private FileSource fileSource;
BufferedReader in;
private String zeile;
private String reihe;
private String[]rowsArray;   
private String a="";
private String result2;

ArrayList<String> c=new ArrayList<String>();
List<List<String>> data;

/**
 * @return the zeile
 */
public String getZeile() {
    return zeile;
}



 public void start(Stage stage) throws IOException  { 
  TableView tableView = new TableView();
  Pattern p = Pattern.compile( "[;\\/|\\t]" );
  Pattern p2 = Pattern.compile("[\\s\\s]");
  //DataSourceReader dsr1 = new FileSource("your csv file path");
  String input = Dialogs.showInputDialog(stage, "Please enter path to csv:", "Input  
  Dialog", "Input Path");
  try{
   this.fileSource = new FileSource(input);     
   in = new BufferedReader(new FileReader(input));
   allColumns=in.readLine();
   }catch(IOException e){
      Dialogs.showErrorDialog(stage, "No CSV-File Found");
      System.exit(0);
  }


 // Pattern p = Pattern.compile( "[;\\.,/|.\\t]" );
  String[] columnsArray=p.split(allColumns);// create array of column names you want to   
  display
  for(int i=0;i<columnsArray.length;i++){
 //  a.add(columnsArray[i]);

    }

  CSVDataSource ds1 = new CSVDataSource(this.fileSource,columnsArray);
  //TableView tableView = new TableView();
 // tableView.setItems(ds1.getData());
  tableView.getColumns().addAll(ds1.getColumns());
  tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);





  try {
       while ((reihe = in.readLine()) != null) {

           String[]row=p.split(reihe);


          // System.out.println(als);


      for (int i = 0; i < row.length; i++) {
          String result=row[i].toString();
          c.add(result);

        }}




        }catch (IOException ex) {
       Logger.getLogger(CSVTableViewer.class.getName()).log(Level.SEVERE, null, ex);



      }

       /* 
     ObservableList<ObservableList> csvData = FXCollections.observableArrayList(); 

     for(List<String> dataList : data) {
     ObservableList<String> row = FXCollections.observableArrayList();
      for( String rowData : dataList) {
      row.add(rowData);
       }
      / add each row to cvsData
     }

    tableView.setItems(csvData);
    */
    /* Fills 'columns' and 'data' */





 // zeile=in.readLine();
 // System.out.println(zeile);
 // rowsArray=p.split(zeile);





  //TableView tableView = new TableView();
  // tableView.setItems(musics);

  //ObservableList musics = FXCollections.observableArrayList();
  //musics.add(a);
  //CSVDataSource ds2 = new CSVDataSource(fileSource,rowsArray);
  //TableView tableView = new TableView();
  //tableView.setItems(ds2.g);



 //  } catch (IOException ex) {
   //    Logger.getLogger(CSVTableViewer.class.getName()).log(Level.SEVERE, null, ex);
  // }

  //tableView.getColumns().addAll(ds2.getData());


  //CSVDataSource ds2 = new CSVDataSource(fileSource,rowsArray);
  //TableView tableView = new TableView();
  // tableView.setItems(musics);
  //tableView.getColumns().addAll(ds1.getColumns());


  // ObservableList musics = FXCollections.observableArrayList();
  //musics.add(a);
  // tableView.setItems(musics);
  ObservableList<ObservableList> csvData = FXCollections.observableArrayList(); 


  ObservableList<String> row = FXCollections.observableArrayList();
  for( String rowData : c) {
    row.add(rowData); 

   // add each row to cvsData
    }
   csvData.add(row);
    tableView.setItems(csvData);

     /*
   for(List<String> dataList : data) {
      ObservableList<String> row = FXCollections.observableArrayList(); 
      ObservableList<String> row = FXCollections.observableArrayList();
      for( String rowData : c) {
          row.add(rowData);

      }
      tableView.setItems(row);

     stage.setScene(SceneBuilder.create().root(tableView).build());  
     stage.show();

   // stage.setScene(SceneBuilder.create().root(tableView).build());  





    // stage.show();  

    /*
      stage.setTitle("Test App");  
     // Just loading the file...  
       FileSource fs = new FileSource("artikel_demo.csv");    
    // Now creating my datasource 
     CSVDataSource dataSource = new CSVDataSource(  
             fs, "order-id", "order-item-id");  
     @SuppressWarnings("rawtypes")  
     TableView table1 = new TableView();  
     TableColumn<?, ?> orderCol = dataSource.getNamedColumn("order-id");  
   TableColumn<?, ?> itemCol = dataSource.getNamedColumn("order-item-id");    
   table1.getColumns().addAll(orderCol, itemCol);  
   table1.setItems(dataSource.getData()); 
   stage.setScene(SceneBuilder.create().root(table1).build());  
   stage.show();  

  */
   //stage.setScene(SceneBuilder.create().root(tableView).build());  
   //stage.show(); 


  //  scene.getRoot().getChildren();

   stage.setScene(SceneBuilder.create().root(tableView).build());  
   stage.show();
       }




/**
 * The main() method is ignored in correctly deployed JavaFX application.
 * main() serves only as fallback in case the application can not be
 * launched through deployment artifacts, e.g., in IDEs with limited FX
 * support. NetBeans ignores main().
 *
 * @param args the command line arguments
 */
public static void main(String[] args) {

     Application.launch(args); 
}


}
4

1 回答 1

1

在您的CarryObject 类中:

public ObservableList<String> getData() {
    ObservableList<String> ostr = FXCollections.observableArrayList();

    ostr.clear();
    for (int i = 0; i < row.length; i++) {
      String result=row[i].toString(); // if you are importing data from that row array
      ostr.add(result);
    }
    return ostr;
}

然后

table.setItems(yourCarryObject.getData());
于 2013-10-06T11:33:58.460 回答