JavaFX从TableView中每行的第n列提取值

时间:2018-11-21 21:04:41

标签: java user-interface javafx

对不起标题,我想不出更好的办法。

下表是我目前正在使用的表 enter image description here

下面是我的代码,用于创建列并从ObservableList自动填充4列中的三列。用户可以编辑第4列“#排序”。我的目标是遍历每一行,并用用户为其输入的值更新该行的项目。我已经成功地遍历了行并从行中获取Item对象,但是我没有找到合适的方法来获取该行的订单值。

TableView tableView = new TableView();
TableColumn itemCodeColumn = new TableColumn("Item Code");
TableColumn itemDescriptionColumn = new TableColumn("Description");
TableColumn numAvailableColumn = new TableColumn("# in Stock");
TableColumn numOrderColumn = new TableColumn("# Ordered");

itemCodeColumn.setCellValueFactory(new PropertyValueFactory<Item,Integer>("itemCode"));
itemDescriptionColumn.setCellValueFactory(new PropertyValueFactory<Item,String>("itemDesc"));
numAvailableColumn.setCellValueFactory(new PropertyValueFactory<Item,Integer>("quantity"));

我已经可以使用以下命令访问在tableView中找到的所有项目

for(Object it : tableView.getItems()){
    Item it2 = (Item) it;
}

但是,这仅给我提供了一个对象的参考来更新有序值,我仍然需要一种从表中提取实际订单号的方法。为此,我使用了我在网上找到的以下代码。请注意,itemGUIList是一个ObservableList,用于填充表。

for(int c=0;c<itemGUIList.size();c++){
     Object o;
     o = tableView.getColumns().get(c).getCellObservableValue(0).getValue();
}

我在这里遇到的问题是方法getCellObservableValue()给了我错误“找不到符号”。搜索此代码不会给我任何结果,并且这段代码似乎对其他所有人都有用。

如果任何人都可以指出我所缺少的内容,或者有解决此问题的更好方法,我将不胜感激。如果您需要我再发布我的代码,请告诉我,我会的。提前谢谢你。

1 个答案:

答案 0 :(得分:1)

TableView的声明中,您使用的是原始类型。

这导致tableView.getColumns()的类型为ObservableList,因此导致tableView.getColumns().get(c)的类型为Object,其中不包含getCellObservableValue方法。 / p>

即使您使用?来解决此问题,也应在声明中添加类型参数:

TableView<Item> tableView = new TableView<>();

TableView<?> tableView = new TableView<>();

注意:

如果可能的话,最好不要使用原始类型,因为这样可以使编译器进行某种类型检查,并且还避免了在代码中编写某些强制类型转换,例如

for(Object it : tableView.getItems()) {
    Item it2 = (Item) it;
}

可以简单地更改为

for(Item it2 : tableView.getItems()) {
}

实际上,实际上不必使用TableColumn来检索订单数量。您可以简单地从商品本身(或存储此数据的其他位置)中检索它,例如:

Item item = tableView.getItems().get(0);
int ordered = item.getOrdered();