gpt4 book ai didi

javafx-2 - Javafx PropertyValueFactory 未填充 Tableview

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:09 25 4
gpt4 key购买 nike

这件事让我困惑了一段时间,我似乎无法理解它。我正在使用单元格值工厂填充一个简单的单列表,但它不会填充在表中。

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

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

这是代码。最后的注释代码似乎可以工作。我检查了是否存在常见错误 - 创建新的列实例或新的 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());
}
};*/

最佳答案

建议的解决方案(使用 Lambda,而不是 PropertyValueFactory)

而不是:

aColumn.setCellValueFactory(new PropertyValueFactory<Appointment,LocalDate>("date"));

写:

aColumn.setCellValueFactory(cellData -> cellData.getValue().dateProperty());

有关更多信息,请参阅此答案:

<小时/>
使用 PropertyValueFactory 的解决方案

上面概述的 lambda 解决方案是首选,但如果您希望使用 PropertyValueFactory,此替代解决方案提供了相关信息。

如何修复

你的 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 使用反射来查找相关的访问器(这些访问器应该是公共(public)的)。首先,它将尝试使用 stockTickerProperty 访问器,如果不存在,则回退到 getter 和 setter。建议提供属性访问器,因为这样您将自动使表能够观察底层模型中的属性,并随着底层模型的更改动态更新其数据。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com