【问题标题】:How to divide content of ArrayList<String, int> into two different columns如何将 ArrayList<String, int> 的内容分成两个不同的列
【发布时间】:2018-12-03 20:15:46
【问题描述】:

我有你在下面看到的这个 ArrayList。我希望将我的 ArrayList 分为三列,其中一列显示项目的“类别”,例如比萨饼或汉堡,其中一个显示名称,例如玛格丽特,还有一个显示价格。此外,我希望每个项目都有一行,所以 12 行。我试图将我的 ArrayList 的内容输入到 GridPane 中,但我根本无法让它工作。

public abstract class MenuItem {

private String name;
private double price;

public MenuItem(String name, double price) { 
    this.name = name;
    this.price = price;
}

    public void setName(String name) {
}

public String getName() {
        return name;
}

    public void setPrice(double price) {
}

public double getPrice() {
        return price;
}



public class OrderMenu {

private ArrayList<MenuItem> menuItems;


public OrderMenu(){

            menuItems.add(new Pizza("Margherita", 50));
            menuItems.add(new Pizza("Hawaii", 55));
            menuItems.add(new Pizza("Marinara", 70));
            menuItems.add(new Pizza("Meat Lovers", 70));
            menuItems.add(new Pizza("Calzone", 60));

            menuItems.add(new Burger("Burger", 60));
            menuItems.add(new Burger("Cheeseburger", 65));
            menuItems.add(new Burger("Baconburger", 60));

            menuItems.add(new Soda("Coca cola", 25));
            menuItems.add(new Soda("Coca cola light", 25));             
            menuItems.add(new Soda("Fanta", 25));
            menuItems.add(new Soda("Faxe kondi", 25));  

}

【问题讨论】:

  • TableView 更适合您描述的目的。
  • 我已经把它做成了一个tableview我只是对它的外观不太满意,所以我希望有另一个选择:)
  • 外观和控制没有耦合。 TableView 是最符合逻辑的控件。如果你想定制它,你可以很容易地做到这一点。查看此站点上的 JavaDocs 或其他问题。如果您找不到方法来做您想做的事,请询问有关自定义 TableView 外观的问题。

标签: javafx arraylist gridpane


【解决方案1】:

您不是很清楚...但我想您想将该 ArrayList 信息放入某些表/列中。

您可以使用 ObservableList 来检查数据中的所有更改:

private ObservableList<MenuItem> menuItems = FXCollections.observableArrayList();

您可以像这样在控制器中设置一些 TableView 和 TableColumns:

@FXML
private TableView<MenuItem> menuTable;
@FXML
private TableColumn<MenuItem, String> nameColumn;
@FXML
private TableColumn<MenuItem, String> priceColumn;

然后,在同一个控制器中,在初始化控制器时设置列:

    @FXML
    private void initialize() {
        nameColumn.setCellValueFactory(cellData -> 
          cellData.getValue().getName());
        priceColumn.setCellValueFactory(cellData -> 
          cellData.getValue().getPrice());
    }

然后,在您的主类中,当您将 mainApp 设置为此控制器时,您可以将列表中的所有项目设置为该表:

public void setMainApp(MainApp mainApp) {
        this.mainApp = mainApp;
        menuTable.setItems(menuItems);
    }

希望这可以帮助你,这里有一个完整的例子:

https://code.makery.ch/library/javafx-tutorial/part2/

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2018-05-10
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多