将arraylist添加到我的javafx程序中的choicebox
所以我一直在尝试将我的arraylist转移到我在JavaFX类中创建的choicebox。但是,我在加载项目名称时遇到了一些问题。我创建了一个名为Item的独立类,其中包含我创建的构造函数,并创建了一个返回Item名称的方法。但是,我希望将项目属性传输到我的choicebox,但只显示项目名称将arraylist添加到我的javafx程序中的choicebox,java,javafx,arraylist,Java,Javafx,Arraylist,所以我一直在尝试将我的arraylist转移到我在JavaFX类中创建的choicebox。但是,我在加载项目名称时遇到了一些问题。我创建了一个名为Item的独立类,其中包含我创建的构造函数,并创建了一个返回Item名称的方法。但是,我希望将项目属性传输到我的choicebox,但只显示项目名称 public class Item { private final String name, description; private boolean spoiled, buyabl
public class Item {
private final String name, description;
private boolean spoiled, buyable;
private final int price, nutrition;
private final boolean isFood;
private double hoursToRot = 15;
public Item() {
this.name = null;
this.description = null;
this.price = 0;
this.nutrition = 0;
this.isFood = false;
}
public Item(String name, String description, int price, boolean buyable, boolean isFood, int nutrition)
{
this.description = description;
this.name = name;
this.price = price;
this.buyable = buyable;
this.isFood = isFood;
this.nutrition = nutrition;
}
public String getName()
{
return name;
}
...
如您所见,这是我的item类
public class Game
{
Item item = new Item();
public ArrayList<Item> supermarkedItems = new ArrayList();
public void supermarkedItems() {
Item meat, milk, cake, rice, ryebread;
milk = new Item("milk", "This is milk!", 14, true, true, 20);
meat = new Item("meat", "This is meat!", 35, true, true, 30);
cake = new Item("cake", "This is a whole cake!", 60, true, true, 50);
rice = new Item("rice", "This is 500g of white rice!", 25, true, true, 50);
ryebread = new Item("ryebread", "This is a loaf of ryebread", 25, true, true, 25);
supermarkedItems.add(meat);
supermarkedItems.add(milk);
supermarkedItems.add(cake);
supermarkedItems.add(rice);
supermarkedItems.add(ryebread);
}
public ArrayList<Item> getsupermarkedList() {
return supermarkedItems;
}
public String getItemNames () {
return item.getName();
}
...
公共类游戏
{
项目=新项目();
public ArrayList supermarkedItems=new ArrayList();
公开无效的超级市场(){
肉类、牛奶、蛋糕、大米、黑麦;
牛奶=新物品(“牛奶”,“这是牛奶!”,14,对,对,20);
肉=新项目(“肉”,“这是肉!”,35,对,对,30);
蛋糕=新项目(“蛋糕”,“这是一个完整的蛋糕!”,60,对,对,50);
大米=新产品(“大米”,“这是500克白米!”,25,对,对,50);
Ryebrad=新项目(“Ryebrad”,“这是一块Ryebrad面包”,25,真,真,25);
超级市场。添加(肉);
超级市场。添加(牛奶);
超级市场。添加(蛋糕);
超级市场。添加(大米);
超级市场。添加(ryebread);
}
公共阵列列表getsupermarkedList(){
回归超级市场;
}
公共字符串getItemName(){
return item.getName();
}
...
这是我的游戏课。
在我的javafx程序中,我创建了一个singleton类来将我的东西传输到javafx类
public class OrderTableController implements Initializable {
Game g1 = Game.getInstance();
@FXML
private ChoiceBox<Item> cbItems = new ChoiceBox<Item>(FXCollections.observableArrayList(g1.getsupermarkedList()));
@Override
public void initialize(URL url, ResourceBundle rb) {
cbItems.getItems().addAll(g1.getItemNames());
...
公共类OrderTableController实现可初始化{
Game g1=Game.getInstance();
@FXML
private ChoiceBox cbItems=new ChoiceBox(FXCollections.observearraylist(g1.getsupermarkedList());
@凌驾
公共void初始化(URL、ResourceBundle rb){
cbItems.getItems().addAll(g1.getItemNames());
...
但是由于某些原因,我真的无法将我的项目转移到我在choicebox类中创建的新observableArrayList。
您遇到了一个错误,因为您试图将
字符串类型的对象添加到应该包含项类型的列表中。您只能添加属于或扩展类项的对象
要选择对象在选择框中显示的文本,您需要在类中覆盖toString()
您可以将其添加到项目类中,以在选项框中显示名称:
@Override
public String toString() {
return name;
}
您可以通过执行以下操作将项目添加到ChoiceBox:
cbItems.getItems().addAll( g1.getsupermarkedList() );