JavaFX PropertyValueFactory未填充Tableview

JavaFX PropertyValueFactory未填充Tableview

这使我困惑了一段时间,我似乎无法理解它。我使用CellValueFactory填充一个简单的单列表,但它没有在表中填充。

这样做了,我点击了填充的行,但是我没有看到它们中的任何值-在本例中,是字符串值。[我只是编辑了这篇文章,使之更清晰]

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

这是密码。不过,最后的注释代码似乎有效。我已经检查了是否存在常见的错误-创建新的列实例或新的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类MainguicController.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());
        }
    };*/


慕神8447489
浏览 1183回答 2
2回答

牧羊人nacy

如何修复它getter和setter方法的情况是错误的。getstockTicker应该是getStockTickersetstockTicker应该是setStockTicker一些背景资料您的PropertyValueFactory与以下内容相同:new&nbsp;PropertyValueFactory<Stock,String>("stockTicker")当您还向Stock类添加属性访问器时,命名约定将变得更加明显:public&nbsp;class&nbsp;Stock&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;SimpleStringProperty&nbsp;stockTicker; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Stock(String&nbsp;stockTicker)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stockTicker&nbsp;=&nbsp;new&nbsp;SimpleStringProperty(stockTicker); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getStockTicker()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;stockTicker.get(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setStockTicker(String&nbsp;stockticker)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stockTicker.set(stockticker); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;StringProperty&nbsp;stockTickerProperty()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;stockTicker; &nbsp;&nbsp;&nbsp;&nbsp;}}PropertyValueFactory使用反射查找相关的访问器。首先,它将尝试使用StockTickerProperty访问器,如果不存在,则返回到getter和setter。建议提供一个属性访问器,因为您将自动启用您的表来观察基础模型中的属性,并在底层模型更改时动态更新它的数据。

繁星淼淼

将getter和Setter方法放入所有元素的数据类中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java