所以我检查了另一个No content in TableView,但这没有帮助。
我有一个名为分类帐的数据库,我想将我的交易记录下来。
void buildData(){
final ObservableList<ObservableList<String>> data = null
try{
//ResultSet
ResultSet rs = sql.getTransactions(account.getValue().toString())
/**********************************
* TABLE COLUMN ADDED DYNAMICALLY *
**********************************/
for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
//We are using non property style for making dynamic table
final int j = i
TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1))
col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty(param.getValue().get(j).toString())
}
})
budgetTable.getColumns().addAll(col)
}
/********************************
* Data added to ObservableList *
********************************/
while(rs.next()){
//Iterate Row
ObservableList<String> row = FXCollections.observableArrayList()
for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
//Iterate Column
row.add(rs.getString(i))
}
println("Row [1] added "+row )
data?.add(row)
}
//FINALLY ADDED TO TableView
budgetTable.setItems(data)
}catch(Exception e){
e.printStackTrace()
System.out.println("Error on Building Data")
}
}
我在数据库中有5列会复原,并添加到tableview中。这些是日期,from_account,to_account,金额和注释:
mysql> show columns from ledger;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| version | bigint(20) | NO | | 1 | |
| date | datetime | NO | | NULL | |
| notes | varchar(35) | NO | | NULL | |
| amount | double | NO | | NULL | |
| from_account | varchar(19) | NO | | NULL | |
| to_account | varchar(55) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
7 rows in set (0.45 sec)
我没有错误,否则我将有很大的机会解决它。在这一点上,我不知道是什么问题。在构建时只说“表中没有内容”。该文件是一个时髦的文件,所以这就是为什么它看起来像python语法的原因。
在此先感谢您的帮助,时间和见解! 保持健康!
答案 0 :(得分:0)
我对Groovy不太熟悉,但我相信我知道问题所在。首先,您将data
声明为final
,然后将null
分配给它。
final ObservableList<ObservableList<String>> data = null;
这意味着将null
设置为TableView
的项目。基本上,您是在呼叫budgetTable.setItems(null)
。您通常不会达到这一点,因为调用data.add(row)
会抛出一个NullPointerException
。除非您不使用data.add(row)
,而是使用data?.add(row)
。 ?
是safe navigation operator。
安全导航运算符用于避免出现
NullPointerException
。通常,当您引用一个对象时,在访问该对象的方法或属性之前,可能需要验证该对象不是null
。为了避免这种情况,安全导航操作员将只返回null
而不是抛出异常...
有关更多信息,请参见this question。
给出所有这些,只需更改即可:
final ObservableList<ObservableList<String>> data = null;
收件人:
final ObservableList<ObservableList<String>> data = FXCollections.observableArrayList();
应该解决您的问题。