【问题标题】:Duplicate columns in JavaFX TableViewJavaFX TableView 中的重复列
【发布时间】:2015-04-05 23:36:49
【问题描述】:

我正在从 MySQL 数据库中提取 ResultSet 并尝试在按键按下事件上动态构建 TableView。我第一次触发它时它工作得很好,但在随后的所有时间里,它都会创建我的初始列的副本,同时更改每列的行数据以匹配新的 ResultSet。我希望每次运行此构建函数时都彻底清除 TableView。

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<TableColumn.CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){                    
                @Override
                public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {                                                                                              
                    return new SimpleStringProperty(param.getValue().get(j).toString());                        
                }                    
            });

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

        while(rs.next())
        {
            ObservableList<String> row = FXCollections.observableArrayList();
            row.removeAll(row);
            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);

我尝试过的事情:

  • 观察 ObservableList 数据的值,它是空的 每次执行函数时都会重新实例化
  • 使用tableView.getColumns.removeAll()清除TableView的列

【问题讨论】:

    标签: java javafx tableview


    【解决方案1】:

    在开始添加之前清除当前列:

    table.getColumns().clear();
    for(int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
        // ...
    }
    

    【讨论】:

      【解决方案2】:
          columnCita.setCellValueFactory(new PropertyValueFactory<>("cita"));
          columnLast.setCellValueFactory(new PropertyValueFactory<>("ultimavisita"));
          columnImporteF.setCellValueFactory(new PropertyValueFactory<>("precio"));
      
          columnCita.prefWidthProperty().bind(table.widthProperty().divide(15));
          columnLast.prefWidthProperty().bind(table.widthProperty().divide(6));
          columnImporteF.prefWidthProperty().bind(table.widthProperty().divide(9));
      

      在我的情况下,错误在下一行。因为我已经添加了列。

          table.getColumns().addAll(columnCita, columnLast, columnImporteF);
      

      问题是您要再次添加列。

      【讨论】:

        猜你喜欢
        • 2018-05-20
        • 1970-01-01
        • 2016-05-13
        • 2018-09-19
        • 2021-09-03
        • 2016-10-31
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        相关资源
        最近更新 更多