javafx-2 - Javafx PropertyValueFactory 不填充 Tableview

标签 javafx-2 javafx tableview

这让我困惑了一段时间,我似乎无法掌握它。我正在使用 Cell Value Factory 填充一个简单的单列表,但它没有填充到表中。

确实如此,我单击了填充的行,但在其中没有看到任何值 - 在本例中为字符串值。 [我刚刚编辑了这个以使其更清楚]

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

这是代码。不过,最后的注释代码似乎有效。我已经检查过是否存在常见的错误——创建一个新的列实例或一个新的 tableview 实例。没有。请帮忙!

//简单的数据模型
股票.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());
        }
    };*/

最佳答案

如何修复

你的 getter 和 setter 方法的情况是错误的。
getstockTicker应该是 getStockTickersetstockTicker应该是 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 使用反射来查找相关访问器。首先,它将尝试使用 stockTickerProperty 访问器,如果不存在,则回退到 getter 和 setter。建议提供一个属性访问器,因为这样您将自动启用您的表来观察底层模型中的属性,并随着底层模型的变化动态更新它的数据。

关于javafx-2 - Javafx PropertyValueFactory 不填充 Tableview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17035478/

相关文章:

JavaFx WebView 不更新 XmlHttpRrequest 后台数据

java - 无法使 TableView 的 "Select All"CheckBox 工作 (JavaFX)

java - 如何在 Canvas 上绘制多个对象?

ios - iOS 10 的 Cell 耗尽了 tableview

xcode - 使用 tableView :moveRowAtIndexPath:toIndexPath: method 后将新订单保存到核心数据

java - 在 javafx 中删除边框 Pane 中的特定节点

java - 将多个jar合并为一个(使用maven)

Javafx:jpeg 文件存在,但 Image 构造函数抛出 IllegalArgumentException!为什么?

javafx - 单击鼠标中键即可选择 TableView 行

尽管事件被消耗,JavaFx 2.0 主窗口还是关闭