这让我困惑了一段时间,我似乎无法掌握它 . 我正在使用Cell Value Factory来填充一个简单的一列表,它不会填充在表中 .
它确实和我点击了已填充的行,但我没有看到任何值 - 在本例中为String值 . [我刚刚编辑了这个以使它更清晰]
我有一个不同的项目,它在同一种数据模型下工作 . 我究竟做错了什么?
这是代码 . 最后评论的代码似乎工作 . 我已经检查过是否存在通常的错误 - 创建新的列实例或新的tableview实例 . 没有 . 请帮忙!
//简单数据模型Stock.java
public class Stock {
private SimpleStringProperty stockTicker;
public Stock(String stockTicker) {
this.stockTicker = new SimpleStringProperty(stockTicker);
}
public String getstockTicker() {
return stockTicker.get();
}
public void setstockTicker(String stockticker) {
stockTicker.set(stockticker);
}
}
// Controller类MainGuiController.java
private ObservableList<Stock> data;
@FXML
private TableView<Stock> stockTableView;// = new TableView<>(data);
@FXML
private TableColumn<Stock, String> tickerCol;
private void setTickersToCol() {
try {
Statement stmt = conn.createStatement();//conn is defined and works
ResultSet rsltset = stmt.executeQuery("SELECT ticker FROM tickerlist order by ticker");
data = FXCollections.observableArrayList();
Stock stockInstance;
while (rsltset.next()) {
stockInstance = new Stock(rsltset.getString(1).toUpperCase());
data.add(stockInstance);
}
} catch (SQLException ex) {
Logger.getLogger(WriteToFile.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Connection Failed! Check output console");
}
tickerCol.setCellValueFactory(new PropertyValueFactory<Stock,String>("stockTicker"));
stockTableView.setItems(data);
}
/*THIS, ON THE OTHER HAND, WORKS*/
/*Callback<CellDataFeatures<Stock, String>, ObservableValue<String>> cellDataFeat =
new Callback<CellDataFeatures<Stock, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<Stock, String> p) {
return new SimpleStringProperty(p.getValue().getstockTicker());
}
};*/
2 回答
How to Fix It
你的getter和setter方法的情况是错误的 .
getstockTicker
应为getStockTicker
setstockTicker
应为setStockTicker
Some Background Information
您的PropertyValueFactory与以下内容保持一致:
当您还向Stock类添加属性访问器时,命名约定似乎更明显:
PropertyValueFactory使用反射来查找相关的访问器 . 首先,它将尝试使用stockTickerProperty访问器,如果不存在则返回到getter和setter . 建议提供属性访问器,然后您将自动启用表以观察基础模型中的属性,随着基础模型的更改动态更新其数据 .
将Getter和Setter方法放在所有元素的数据类中 .