how to generate button(picture) based on checkboxes selection in javafx

前端 未结 2 596
误落风尘
误落风尘 2021-01-28 08:56

My question is how to generate buttons, set with car pictures, based on the checkboxes and/or radio buttons selected by a user in javafx?

I\'m simulating a car dealershi

2条回答
  •  一生所求
    2021-01-28 09:13

    This is a terrible implementation but It will give you some ideas on how to do things. You need to research FilteredList, ListView, and Predicate. This implementation does not handle more than one CheckBox at a time. It will only display the last CheckBox action.

    CarList

    import java.util.ArrayList;
    import java.util.List;
    import javafx.application.Application;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.collections.transformation.FilteredList;
    import javafx.scene.Scene;
    import javafx.scene.control.CheckBox;
    import javafx.scene.control.ListCell;
    import javafx.scene.control.ListView;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    
    /**
     *
     * @author Sedrick
     */
    public class CarList extends Application {
    
        @Override
        public void start(Stage primaryStage) {
            List cars = new ArrayList();
            cars.add(new Car("Honda", "2004"));
            cars.add(new Car("Ford", "2005"));
            cars.add(new Car("Ford", "2004"));
            cars.add(new Car("Honda", "2005"));
            cars.add(new Car("Toyota", "2004"));
            cars.add(new Car("Cadillac", "2005"));
    
            ListView view = new ListView();
            view.setCellFactory((ListView param) -> {
                ListCell cell = new ListCell() {
                    CarView carView = new CarView();
    
                    @Override
                    protected void updateItem(Car item, boolean empty) {
                        super.updateItem(item, empty);
                        if (item != null) {
                            setText("");
                            carView.setMake(item.getMake());
                            carView.setModel(item.getModel());
                            carView.setImageView(item.getUrl());
                            setGraphic(carView);
                        } else {
                            setText("");
                            setGraphic(null);
                        }
                    }
                };
                return cell;
            });
            ObservableList data = FXCollections.observableArrayList(cars);
            FilteredList filteredList = new FilteredList(data);
            view.setItems(filteredList);
            HBox.setHgrow(view, Priority.ALWAYS);
    
            CheckBox checkBox = new CheckBox("Honda");
            checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> {     
                if(newValue)
                {
                filteredList.setPredicate((item) -> {
                    return item.getMake().equals("Honda");
                });
                }
                else{
                    filteredList.setPredicate((item) -> {
                        return true;
                    });
                }
            });
            CheckBox checkBox2 = new CheckBox("Ford");
            checkBox2.selectedProperty().addListener((observable, oldValue, newValue) -> {
                if(newValue)
                {
                filteredList.setPredicate((item) -> {
                    return item.getMake().equals("Ford");
                });
                }
                else{
                    filteredList.setPredicate((item) -> {
                        return true;
                    });
                }
            });
            CheckBox checkBox3 = new CheckBox("2004");
            checkBox3.selectedProperty().addListener((observable, oldValue, newValue) -> {
                if(newValue)
                {
                filteredList.setPredicate((item) -> {
                    return item.getModel().equals("2004");
                });
                }
                else{
                    filteredList.setPredicate((item) -> {
                        return true;
                    });
                }
            });
            CheckBox checkBox4 = new CheckBox("2005");
            checkBox4.selectedProperty().addListener((observable, oldValue, newValue) -> {
                if(newValue)
                {
                filteredList.setPredicate((item) -> {
                    return item.getModel().equals("2005");
                });
                }
                else{
                    filteredList.setPredicate((item) -> {
                        return true;
                    });
                }
            });
    
    
            VBox leftPanel = new VBox(checkBox, checkBox2, checkBox3, checkBox4);
    
            HBox root = new HBox(leftPanel, view);
    
            Scene scene = new Scene(root, 625, 500);
    
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }
    
    }
    

    CarView

    import javafx.scene.control.Label;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.layout.StackPane;
    import javafx.scene.layout.VBox;
    
    /**
     *
     * @author Sedrick
     */
    final public class CarView extends HBox{
        Label make = new Label();
        Label model = new Label();
        ImageView imageView = new ImageView();
    
        public CarView(String make, String model, String url) {
            this.make.setText(make);
            this.model.setText(model);
    
            HBox row1 = new HBox(new Label("Make: "), this.make);
            HBox row2 = new HBox(new Label("Model: "), this.model);
            VBox vbox = new VBox(row1, row2);
            vbox.setMaxSize(USE_PREF_SIZE, USE_PREF_SIZE);
    
    
    
    
    
    
            StackPane stackPane1 = new StackPane(vbox);
            HBox.setHgrow(stackPane1, Priority.ALWAYS);
    
    
            Image image = new Image(url);
            this.imageView.setImage(image);
            this.imageView.setFitHeight(100);
            this.imageView.setFitWidth(200);
            StackPane stackPane2 = new StackPane(this.imageView);
            stackPane2.setStyle("-fx-background-color: yellow");
            getChildren().addAll(stackPane1, stackPane2);
    
            setPrefSize(500, 125);
    
        }
    
        public CarView()
        {        
            HBox row1 = new HBox(new Label("Make: "), this.make);
            HBox row2 = new HBox(new Label("Model: "), this.model);
            VBox vbox = new VBox(row1, row2);
            vbox.setMaxSize(USE_PREF_SIZE, USE_PREF_SIZE);
    
    
    
    
    
    
            StackPane stackPane1 = new StackPane(vbox);
            HBox.setHgrow(stackPane1, Priority.ALWAYS);
    
    
            this.imageView.setFitHeight(100);
            this.imageView.setFitWidth(200);
            StackPane stackPane2 = new StackPane(this.imageView);
            stackPane2.setStyle("-fx-background-color: yellow");
            getChildren().addAll(stackPane1, stackPane2);
    
            setPrefSize(500, 125);
        }
    
        public void setImageView(String url) {
            Image image = new Image(url);
    
            this.imageView.setImage(image);
        }
    
        public void setMake(String make) {
            this.make.setText(make);
        }
    
        public void setModel(String model)
        {
            this.model.setText(model);
        }
    
    }
    

    Car

    /**
     *
     * @author Sedrick
     */
    public class Car {
        private String make;
        private String model;
        private String url = "https://cdn.pixabay.com/photo/2012/05/29/00/43/car-49278_960_720.jpg";
    
    
        public Car(String make, String model) {
            this.make = make;
            this.model = model;
        }
    
        public String getMake() {
            return make;
        }
    
        public String getModel() {
            return model;
        }
    
        public String getUrl()
        {
            return url;
        }
    
        public void setMake(String make) {
            this.make = make;
        }
    
        public void setModel(String model) {
            this.model = model;
        }   
    }
    

提交回复
热议问题