tableview只显示添加到observeList()的最后一个输入

sxissh06  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(373)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我试图创建一个tableview来显示指定resultset返回的所有行,我使用observablelist来存储这些行,这些行可以很好地存储所有行,但是我只得到添加的第一行的输出。我想指定我目前没有得到任何错误,我的代码如下。

public class StockController implements Initializable {

  @FXML
   private TableView tableview;

  ObservableList<ObservableList> data = FXCollections.observableArrayList();
@Override
public void initialize(URL url, ResourceBundle rb) {

    dbconn conn = new dbconn();

    try{
    String SQL = "SELECT * FROM recibido WHERE id < 3";

    ResultSet rs = conn.con.createStatement().executeQuery(SQL);

    for(int i = 0; i < rs.getMetaData().getColumnCount(); i++){
        final int j = i;
        TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1));
        col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>(){
             public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {                                                                                              
                    return new SimpleStringProperty(param.getValue().get(j).toString());                        
                }   
        });

        tableview.getColumns().addAll(col);
        System.out.println("Column ["+i+"] ");

    }
    ObservableList<String> row = FXCollections.observableArrayList();
    while(rs.next()){

        for(int i = 1; i<=rs.getMetaData().getColumnCount(); i++){
            row.add(rs.getString(i));
        }
        System.out.println("Row [1] added "+row);
        data.add(row);

    }

    tableview.setItems(data);

}    catch( Exception e){
    e.printStackTrace();
    System.out.println("Error on Building Data"); 
}
}
@FXML
private void goToReception(ActionEvent event) throws IOException {
    Parent reception = FXMLLoader.load(getClass().getResource("reception.fxml"));
    Scene scene = new Scene(reception);
    Stage receptionWindow = (Stage)((Node)event.getSource()).getScene().getWindow();

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

}

我相信我的问题可能与不正确的启动有关

ObservableList<ObservableList> data = FXCollections.observableArrayList();

希望有人能帮我。我已经疯了好几天了。
代码编译/输出。在此处输入图像描述

eagi6jfj

eagi6jfj1#

请更改以下内容:

ObservableList<String> row = FXCollections.observableArrayList();
while(rs.next()){

    for(int i = 1; i<=rs.getMetaData().getColumnCount(); i++){
        row.add(rs.getString(i));
    }
    System.out.println("Row [1] added "+row);
    data.add(row);

}

tableview.setItems(data);

while(rs.next()){
   ObservableList<String> row = FXCollections.observableArrayList();     
    for(int i = 1; i<=rs.getMetaData().getColumnCount(); i++){
        row.add(rs.getString(i));
    }
    System.out.println("Row [1] added "+row);
    data.add(row);

}

tableview.setItems(data);

相关问题