Борьба с получением контента из observbleArrayList для показа - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать систему заказа пиццы в JavaFx, используя TableView в графическом интерфейсе.Я, наконец, получил его на работу, но теперь я немного борюсь с макетом.Я не могу получить содержимое моего observablearraylist, чтобы показать только кнопку?

public class PizzaOrderingSystem extends Application {

    private final TableView<MenuItem> table = new TableView<>();
    private final ObservableList<MenuItem> ObservableList = 
            FXCollections.observableArrayList();

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {

        stage.setTitle("Pizza Ordering System");
        stage.setWidth(600);
        stage.setHeight(600);

        setTableappearance();

        fillTableViewObservableListWithSampleMenuItem();
        table.setItems(ObservableList);

        //Name column
        TableColumn<MenuItem, String> nameColumn = new TableColumn<>("Name of item"); 
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        //Price column
        TableColumn<MenuItem, Double> priceColumn = new TableColumn<>("Price of item");
        priceColumn.setCellValueFactory(new PropertyValueFactory<>("price"));

        table.getColumns().addAll(nameColumn, priceColumn);

        addButtonToTable();

        Scene scene = new Scene(new Group(table));

        stage.setScene(scene);
        stage.show();
    }

    private void setTableappearance() {
        table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        table.setPrefWidth(600);
        table.setPrefHeight(600);
    }

    private void fillTableViewObservableListWithSampleMenuItem() {

        ObservableList.addAll(new Pizza("Margherita", 50),
                new Pizza("Hawaii", 55),
                new Pizza("Marinara", 70),
                new Pizza("Meat Lovers", 70),
                new Pizza("Calazone", 60),

                new Burger("Burger", 60),
                new Burger("Cheeseburger", 65),
                new Burger("Baconburger", 65),

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

    }

    private void addButtonToTable() {
        TableColumn<MenuItem, Void> button = new TableColumn("Select your items");

        Callback<TableColumn<MenuItem, Void>, TableCell<MenuItem, Void>> 
        cellFactory = new Callback<TableColumn<MenuItem, Void>, TableCell<MenuItem, Void>>() {

            @Override
            public TableCell<MenuItem, Void> call(final TableColumn<MenuItem, Void> param) {
                final TableCell<MenuItem, Void> cell = new TableCell<MenuItem, Void() { 

                    private final Button button = new Button("Select");

                    {
                        button.setOnAction((ActionEvent event) -> {
                            MenuItem menuItem = getTableView().getItems().get(getIndex());
                            System.out.println("selectedMenuItem: " + menuItem);
                        });
                    }

                    @Override
                    public void updateItem(Void item, boolean empty) {
                        super.updateItem(item, empty);
                        if (empty) {
                            setGraphic(null);
                        } else {
                            setGraphic(button);
                        }
                    }
                };
                return cell;
            }
        };

        button.setCellFactory(cellFactory);

        table.getColumns().add(button);
    }
}

enter image description here

1 Ответ

0 голосов
/ 02 декабря 2018

Здесь решен код, см. Рисунок ниже.

public class PizzaOrderingSystem extends Application {

private final TableView<MenuItem> table = new TableView<>();
private final ObservableList<MenuItem> ObservableList = FXCollections.observableArrayList();


public static void main(String[] args) {
    launch(args);
}

//Creating Stage and layout for Stage
@Override
public void start(Stage stage) {

    stage.setTitle("Pizza Ordering System");
    stage.setWidth(600);
    stage.setHeight(600);

//Assigning content to the tableView and setting appearance of tableView
    setTableappearance();

    fillTableViewObservableListWithSampleMenuItem();
    table.setItems(ObservableList);

        //Name column
        TableColumn<MenuItem, String> nameColumn = new TableColumn<>("Name of item");
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        //Price column
        TableColumn<MenuItem, Double> priceColumn = new TableColumn<>("Price of item");
        priceColumn.setCellValueFactory(new PropertyValueFactory<>("price"));

    table.getColumns().addAll(nameColumn, priceColumn);

    //Adding select buttons to the tableView
    addButtonToTable();

    //Adding borderPane, vBox and hBox to setup layout and easier control content in PizzaOrderingSystem
    BorderPane border = new BorderPane();

    //Making layout for vBox
    VBox vBox = new VBox();
    vBox.setVgrow (table, Priority.ALWAYS);
    vBox.getChildren().addAll(table);

    //Creaing a lable to sit in the hBox with the title of the Pizzaria + making layout for label
    Label label = new Label("Hungry Dog Pizzaria");
    label.setFont(Font.font ("Verdana",20));

    //Making Layout for hbox
    HBox hBox = new HBox();
    hBox.getChildren().add(label);
    hBox.setAlignment(Pos.CENTER);
    hBox.setMaxHeight(70);
    hBox.setPrefHeight(70);

    //Entering vBox and hBox to borderPane
    border.setTop(hBox);
    border.setCenter(vBox);

    //Attacing borderPane to scene
    Scene scene = new Scene(border);
    stage.setScene(scene);
    stage.show();
}

//setting appearance of tableView e.g. width and heigh of columns
private void setTableappearance() {
    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    table.setPrefWidth(600);
    table.setPrefHeight(600);   
}

//Creating an ObservableArrayList with menu items containing attributes from the super class MenuItem 
private void fillTableViewObservableListWithSampleMenuItem() {

    ObservableList.addAll(new Pizza("Margherita", 50),
                          new Pizza("Hawaii", 55),
                          new Pizza("Marinara", 70),
                          new Pizza("Meat Lovers", 70),
                          new Pizza("Calazone", 60),

                          new Burger("Burger", 60),
                          new Burger("Cheeseburger", 65),
                          new Burger("Baconburger", 65),

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

}


private void addButtonToTable() {
    TableColumn<MenuItem, Void> button = new TableColumn("Select your items");


    Callback<TableColumn<MenuItem, Void>, TableCell<MenuItem, Void>> cellFactory = new Callback<TableColumn<MenuItem, Void>, TableCell<MenuItem, Void>>() {

        @Override
        public TableCell<MenuItem, Void> call(final TableColumn<MenuItem, Void> param) {
        final TableCell<MenuItem, Void> cell = new TableCell<MenuItem, Void>() {

                private final Button button = new Button("Select");

                {
                    button.setOnAction((ActionEvent event) -> {
                    MenuItem menuItem = getTableView().getItems().get(getIndex());
                    System.out.println("Selected MenuItem: " + menuItem);
                    });
                }

                @Override
                public void updateItem(Void item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setGraphic(null);
                    } else {
                        setGraphic(button);
                    }
                }
            };
            return cell;
        }
    };

    button.setCellFactory(cellFactory);

    table.getColumns().add(button);


}
}

Изображение кода при запуске

...