Tableview 只显示最后添加到 observableList() 的输入
Tableview only shows the last input added to observableList()
我正在尝试创建一个表视图来显示指定结果集 returns 的所有行,我正在使用 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();
希望有人能帮助我,我已经疯了好几天了。
代码Compiled/Output。
enter image description here
请更改以下内容:
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);
我正在尝试创建一个表视图来显示指定结果集 returns 的所有行,我正在使用 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();
希望有人能帮助我,我已经疯了好几天了。
代码Compiled/Output。 enter image description here
请更改以下内容:
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);