如何向标签文本添加多个ListView选择?

问题描述 投票:0回答:1

这里是正在执行的程序的gif:

enter image description here我正在尝试编写一个程序,让用户从每个ListView中选择一个对象,然后按一个按钮以在标签中显示所选的选项。现在,该按钮不会显示标签。它仅在按下按钮后我选择一个选项时出现。我也不确定如何使标签从多个ListView中获取文本。

这是我的代码:

    private final String[] crust = {"Thin", "Thick", "Cheese Stuffed",
        "Detroit Style"};
    private final String[] cheese = {"Mozzarella", "Provolone", "Parmesan",
        "Grana Podano"};
    private final String[] meat = {"Sausage", "Pepperoni", "Bacon", "Ham"};
    private final String[] vegi = {"Green Pepper", "Onion", "Olives", "Mushrooms"};
    private final String[] sauce = {"Red Sauce", "White Sauce", "Pesto", "Ranch"};
    @Override
    public void start(Stage primaryStage) {
        HBox topBox = new HBox(4);
        ListView<String> crustList = new ListView<> (FXCollections
                .observableArrayList(crust));
        ListView<String> cheeseList = new ListView<> (FXCollections
                .observableArrayList(cheese));
        ListView<String> meatList = new ListView<> (FXCollections
                .observableArrayList(meat));
        ListView<String> vegiList = new ListView<> (FXCollections
                .observableArrayList(vegi));
        ListView<String> sauceList = new ListView<> (FXCollections
                .observableArrayList(sauce));
        crustList.setMaxHeight(100);
        cheeseList.setMaxHeight(100);
        meatList.setMaxHeight(100);
        vegiList.setMaxHeight(100);
        sauceList.setMaxHeight(100);
        Label pizzaType = new Label();
        topBox.getChildren().addAll(crustList, cheeseList, meatList, vegiList,
                sauceList);
        Button orderButton = new Button("Order");
        orderButton.setOnAction(e -> {
            crustList.getSelectionModel().selectedItemProperty().addListener((obs, oldValue,
            crustValue) -> {
               pizzaType.setText(crustValue); 
            });
        });
        VBox bottomBox = new VBox(20);
        bottomBox.getChildren().addAll(orderButton, pizzaType);
        BorderPane pane = new BorderPane();
        pane.setTop(topBox);
        pane.setCenter(bottomBox);
        Scene scene = new Scene(pane, 500, 300);
        primaryStage.setTitle("Pizza Order");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
java listview javafx label
1个回答
0
投票

仅在按钮上添加了动作监听器:

orderButton.setOnAction(e -> {
      pizzaType.setText(processSelection());
});

如果将全部5个ListView都设为类变量(字段),则可以如下定义processSelection()

private String processSelection() {
    StringBuilder sb = new StringBuilder(" Selected:\n");
    sb.append(" Crust: " ).append(crustList.getSelectionModel().getSelectedItem()).append("\n");
    sb.append(" Cheese: " ).append(cheeseList.getSelectionModel().getSelectedItem()).append("\n");
    sb.append(" Meat: " ).append(meatList.getSelectionModel().getSelectedItem()).append("\n");
    sb.append(" Veg: " ).append(vegiList.getSelectionModel().getSelectedItem()).append("\n");
    sb.append(" Sauce: " ).append(sauceList.getSelectionModel().getSelectedItem()).append("\n");
    return sb.toString();
}
© www.soinside.com 2019 - 2024. All rights reserved.