Javafx PropertyValueFactory不会填充Tableview

这让我困惑了一会儿,似乎无法得到它的把握。 我正在使用单元格值工厂来填充一个简单的列表,它不会填充在表中。

它和我点击填充的行,但我没有看到它们中的任何值 – 在这种情况下,string值。 [我刚刚编辑这个更清晰]

我有一个不同的项目,在同一种数据模型下工作。 我究竟做错了什么?

这是代码。 最后的评论代码似乎工作。 我已经检查过是否有通常的错误 – 创build一个新的列实例或一个新的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); } } 

//控制器类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()); } };*/ 

如何解决它

你的getter和setter方法的情况是错误的。

getstockTicker应该是getStockTicker

setstockTicker应该被设置为setStockTicker

一些背景信息

您的PropertyValueFactory保持不变:

 new PropertyValueFactory<Stock,String>("stockTicker") 

命名约定在您将一个属性访问器添加到您的Stock类时看起来更为明显:

 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); } public StringProperty stockTickerProperty() { return stockTicker; } } 

PropertyValueFactory使用reflection来查找相关访问器。 首先它将尝试使用stockTickerProperty访问器,如果不存在则返回给getter和setter。 build议提供属性访问器,然后您将自动启用您的表以观察底层模型中的属性,并在底层模型更改时dynamic更新其数据。

把Getter和Setter方法放在你所有元素的数据类中。