如何使用循环从文件向TableView添加项目

时间:2017-06-04 19:42:13

标签: java javafx tableview fxml

我使用此类向tableview javafx添加项目,但它只是将最后一行文件添加到tableview。
 我在这个类中使用ObservableList   我怎么解决这个问题?

public class MyTicket {
String name;
@FXML
private Button back;    
@FXML
private TableView<ShowTicket> table;     
@FXML
private TableColumn<ShowTicket, String> origin; 
@FXML
private TableColumn<ShowTicket, String> goal;    
@FXML
private TableColumn<ShowTicket, String> date;    
public void addName(String userName){
    name= userName;
}   
public void adddata(){      
    String originFile= name + "\\" +name + "origin" + ".txt";   
    String goalFile= name + "\\" +name + "goal" + ".txt";
    String dateFile= name + "\\" +name + "date" + ".txt";       
        try {           
            BufferedReader inputOrigin= new BufferedReader(new FileReader(originFile));
            BufferedReader inputGoal= new BufferedReader(new FileReader(goalFile));
            BufferedReader inputDate= new BufferedReader(new FileReader(dateFile));
            String line1= inputOrigin.readLine();
            String line2= inputGoal.readLine();
            String line3= inputDate.readLine();
            ArrayList<String> or= new ArrayList<>();
            ArrayList<String> go= new ArrayList<>();
            ArrayList<String> da= new ArrayList<>();
            while(line1 != null){                   
                or.add(line1);
                go.add(line2);
                da.add(line3);                  
                line1= inputOrigin.readLine();
                line2= inputGoal.readLine();
                line3= inputDate.readLine();
            }
            int i= or.size();               
            for(int j=0; j<i; j++){                 
                ObservableList<ShowTicket> contactList= FXCollections.observableArrayList(
                        new ShowTicket(or.get(j), go.get(j), da.get(j)));
                table.setItems(contactList);
                origin.setCellValueFactory(new PropertyValueFactory<>("firstName"));
                goal.setCellValueFactory(new PropertyValueFactory<>("lastName"));
                date.setCellValueFactory(new PropertyValueFactory<>("cellPhone"));
            }                               
                inputOrigin.close();
                inputGoal.close();
                inputDate.close();
        }
        catch (FileNotFoundException e){                
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
}//adddata

我的ShowTicket课程:

http://textuploader.com/d0a3e

1 个答案:

答案 0 :(得分:0)

  

我使用这个类向tableview javafx添加项目,但它只是添加了   最后一行文件到tableview。

在每次迭代时覆盖items对象的属性TableView的值是预期的:

for(int j=0; j<i; j++){                 
    ...
   ObservableList<ShowTicket> contactList= FXCollections.observableArrayList(
                        new ShowTicket(or.get(j), go.get(j), da.get(j)));
   table.setItems(contactList);
   ...
}

您应该创建一个包含所有行contactList的{​​{1}}对象。

ShowTicket

然后你可以调用ObservableList<ShowTicket> contactList = FXCollections.observableArrayList(); for(int j=0; j<i; j++){ ... contactList.addAll(FXCollections.observableArrayList( new ShowTicket(or.get(j), go.get(j), da.get(j))); }