Я начинающий Java-программист, изучаю Java FX из разных источников. В моей программе я хотел бы создать ComboBox и заполнить варианты выводом toString() серии объектов из ArrayList. Здесь начинка для пиццы определяется как объект. Они создаются и хранятся в объекте PizzaMgr, в основном, в прославленной оболочке для ArrayList:
public class Topping{
private String name;
public Topping(String a){
this.name=a;
}
public String toString(){
return this.name;
}
}
//=================================================
import java.util.ArrayList;
public class PizzaMgr{
private ArrayList<Topping> OrderedToppings;
public PizzaMgr(){
OrderedToppings = new ArrayList<Topping>();
OrderedToppings.add(new Topping("Pepperoni"));
OrderedToppings.add(new Topping("Mushrooms"));
OrderedToppings.add(new Topping("Onions"));
}
public ArrayList<Topping> getList(){
return OrderedToppings;
}
}
Все идет нормально. Но проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы ComboBox перечислял все эти элементы в ArrayList PizzaMgr. В идеале я хотел бы использовать этот конструктор ComboBox:
ComboBox<T>(ObservableList<T> items)
Проблема? Как извлечь все элементы ArrayList в наблюдаемый список? Я читал Arraylists, Observable Lists, интерфейсы в целом, но я не могу понять, как заставить это работать. Я читал, что ArrayList — это коллекция, а наблюдаемый список может быть интерфейсом к коллекции, поэтому я думал, что свободен дома. Однако, когда я пытаюсь реализовать конструктор ComboBox:
import javafx.scene.control.*;
public class Menu{
public static void main(String[] args){
PizzaMgr m = new PizzaMgr();
ComboBox<Topping> topMenu = new ComboBox<Topping>(m.getList());
}
}
Я получаю ошибку компилятора:
Menu.java:18: error: incompatible types: ArrayList<Topping> cannot be converted to ObservableList<Topping>
ComboBox<Topping> topMenu = new ComboBox<Topping>(m.getList());
^
Таким образом, очевидно, что мой ArrayList не рассматривается как наблюдаемый список.
Что меня ставит в тупик, так это то, как я могу представить свой ArrayList конструктору ComboBox, чтобы он выглядел как наблюдаемый список? Это синтаксическая ловкость рук? Или мне нужно заранее преобразовать ArrayList в другую структуру данных?
Большое спасибо, -РАО