对不起标题,我想不出更好的办法。
下面是我的代码,用于创建列并从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()给了我错误“找不到符号”。搜索此代码不会给我任何结果,并且这段代码似乎对其他所有人都有用。
如果任何人都可以指出我所缺少的内容,或者有解决此问题的更好方法,我将不胜感激。如果您需要我再发布我的代码,请告诉我,我会的。提前谢谢你。
答案 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();