Javafx PropertyValueFactory没有填充Tableview

Nep*_*son 11 javafx tableview javafx-2

这让我困惑了一段时间,我似乎无法掌握它.我正在使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

// 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());
        }
    };*/
Run Code Online (Sandbox Code Playgroud)

jew*_*sea 31

如何解决它

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

getstockTicker 应该 getStockTicker

setstockTicker 应该 setStockTicker

一些背景资料

您的PropertyValueFactory与以下内容保持一致:

new PropertyValueFactory<Stock,String>("stockTicker")
Run Code Online (Sandbox Code Playgroud)

当您还向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;
    }
}
Run Code Online (Sandbox Code Playgroud)

PropertyValueFactory使用反射来查找相关的访问器.首先,它将尝试使用stockTickerProperty访问器,如果不存在则返回到getter和setter.建议提供属性访问器,然后您将自动启用表以观察基础模型中的属性,随着基础模型的更改动态更新其数据.

  • 这是最令人痛苦的部分:我的所有代码都使用这样的方法命名约定.所有这些(除了那个片段之外)我已经在这个问题上花了很多时间......我的FREAKIN GOD !! 谢谢!!!! (2认同)