update my garden from VBox to ListView
This commit is contained in:
		
							parent
							
								
									7920bdff28
								
							
						
					
					
						commit
						2963872237
					
				| 
						 | 
					@ -13,16 +13,12 @@ import ch.zhaw.gartenverwaltung.types.Plant;
 | 
				
			||||||
import javafx.event.ActionEvent;
 | 
					import javafx.event.ActionEvent;
 | 
				
			||||||
import javafx.event.EventHandler;
 | 
					import javafx.event.EventHandler;
 | 
				
			||||||
import javafx.fxml.FXML;
 | 
					import javafx.fxml.FXML;
 | 
				
			||||||
import javafx.scene.control.Alert;
 | 
					import javafx.scene.control.*;
 | 
				
			||||||
import javafx.scene.control.Button;
 | 
					 | 
				
			||||||
import javafx.scene.control.ButtonType;
 | 
					 | 
				
			||||||
import javafx.scene.control.Label;
 | 
					 | 
				
			||||||
import javafx.scene.image.Image;
 | 
					import javafx.scene.image.Image;
 | 
				
			||||||
import javafx.scene.image.ImageView;
 | 
					import javafx.scene.image.ImageView;
 | 
				
			||||||
import javafx.scene.layout.AnchorPane;
 | 
					import javafx.scene.layout.AnchorPane;
 | 
				
			||||||
import javafx.scene.layout.HBox;
 | 
					import javafx.scene.layout.HBox;
 | 
				
			||||||
import javafx.scene.layout.Priority;
 | 
					import javafx.scene.layout.Priority;
 | 
				
			||||||
import javafx.scene.layout.VBox;
 | 
					 | 
				
			||||||
import javafx.stage.Modality;
 | 
					import javafx.stage.Modality;
 | 
				
			||||||
import javafx.stage.Stage;
 | 
					import javafx.stage.Stage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,9 +39,9 @@ public class MyGardenController {
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    public AnchorPane myGardenRoot;
 | 
					    public AnchorPane myGardenRoot;
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    private VBox myPlants_vbox;
 | 
					 | 
				
			||||||
    @FXML
 | 
					 | 
				
			||||||
    private Button addPlant_button;
 | 
					    private Button addPlant_button;
 | 
				
			||||||
 | 
					    @FXML
 | 
				
			||||||
 | 
					    private ListView<Crop> myGarden_listView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * initialize crop list
 | 
					     * initialize crop list
 | 
				
			||||||
| 
						 | 
					@ -55,19 +51,10 @@ public class MyGardenController {
 | 
				
			||||||
    @AfterInject
 | 
					    @AfterInject
 | 
				
			||||||
    @SuppressWarnings("unused")
 | 
					    @SuppressWarnings("unused")
 | 
				
			||||||
    public void init() {
 | 
					    public void init() {
 | 
				
			||||||
        garden.getPlantedCrops().addListener((observable, oldValue, newValue) -> {
 | 
					        System.out.println("once");
 | 
				
			||||||
            try {
 | 
					 | 
				
			||||||
                createPlantView(newValue);
 | 
					 | 
				
			||||||
            } catch (HardinessZoneNotSetException | IOException e) {
 | 
					 | 
				
			||||||
                LOG.log(Level.SEVERE, "Could not update view of croplist!", e);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            createPlantView(garden.getPlantedCrops());
 | 
					 | 
				
			||||||
        } catch (HardinessZoneNotSetException | IOException e) {
 | 
					 | 
				
			||||||
            LOG.log(Level.SEVERE, "Could not update view of croplist!", e);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        setIconToButton(addPlant_button, "addIcon.png");
 | 
					        setIconToButton(addPlant_button, "addIcon.png");
 | 
				
			||||||
 | 
					        myGarden_listView.itemsProperty().bind(garden.getPlantedCrops());
 | 
				
			||||||
 | 
					        setCellFactory();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -78,15 +65,38 @@ public class MyGardenController {
 | 
				
			||||||
        myGardenRoot.fireEvent(new ChangeViewEvent(ChangeViewEvent.CHANGE_MAIN_VIEW, "Plants.fxml"));
 | 
					        myGardenRoot.fireEvent(new ChangeViewEvent(ChangeViewEvent.CHANGE_MAIN_VIEW, "Plants.fxml"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void createPlantView(List<Crop> crops) throws HardinessZoneNotSetException, IOException {
 | 
					    /**
 | 
				
			||||||
        myPlants_vbox.getChildren().clear();
 | 
					     * set cell factory to load {@link HBox} as list view content
 | 
				
			||||||
        for (Crop crop : crops) {
 | 
					     */
 | 
				
			||||||
            HBox hBox = createPlantView(crop);
 | 
					    private void setCellFactory() {
 | 
				
			||||||
            myPlants_vbox.getChildren().add(hBox);
 | 
					        myGarden_listView.setCellFactory(param -> new ListCell<>() {
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            protected void updateItem(Crop crop, boolean empty) {
 | 
				
			||||||
 | 
					                super.updateItem(crop, empty);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (empty || crop == null) {
 | 
				
			||||||
 | 
					                    setText(null);
 | 
				
			||||||
 | 
					                    setGraphic(null);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    try {
 | 
				
			||||||
 | 
					                        setText("");
 | 
				
			||||||
 | 
					                        setGraphic(createHBoxForListView(crop));
 | 
				
			||||||
 | 
					                    } catch (HardinessZoneNotSetException | IOException e) {
 | 
				
			||||||
 | 
					                        LOG.log(Level.WARNING, "Could not get plant for Cell", e);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private HBox createPlantView(Crop crop) throws HardinessZoneNotSetException, IOException {
 | 
					    /**
 | 
				
			||||||
 | 
					     * Creates and returns HBox of the crop
 | 
				
			||||||
 | 
					     * @param crop {@link Crop} which is selected
 | 
				
			||||||
 | 
					     * @return {@link HBox} of the {@link Crop}
 | 
				
			||||||
 | 
					     * @throws HardinessZoneNotSetException exception
 | 
				
			||||||
 | 
					     * @throws IOException exception
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private HBox createHBoxForListView(Crop crop) throws HardinessZoneNotSetException, IOException {
 | 
				
			||||||
        //ToDo add better design
 | 
					        //ToDo add better design
 | 
				
			||||||
        Plant plant = plantList.getPlantById(Settings.getInstance().getCurrentHardinessZone(), crop.getPlantId()).get();
 | 
					        Plant plant = plantList.getPlantById(Settings.getInstance().getCurrentHardinessZone(), crop.getPlantId()).get();
 | 
				
			||||||
        HBox hBox = new HBox(10);
 | 
					        HBox hBox = new HBox(10);
 | 
				
			||||||
| 
						 | 
					@ -103,8 +113,8 @@ public class MyGardenController {
 | 
				
			||||||
        label.setMaxWidth(2000);
 | 
					        label.setMaxWidth(2000);
 | 
				
			||||||
        HBox.setHgrow(label, Priority.ALWAYS);
 | 
					        HBox.setHgrow(label, Priority.ALWAYS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Button details = new Button("");
 | 
					        Button details = new Button();
 | 
				
			||||||
        Button delete = new Button("");
 | 
					        Button delete = new Button();
 | 
				
			||||||
        setIconToButton(details, "detailsIcon.png");
 | 
					        setIconToButton(details, "detailsIcon.png");
 | 
				
			||||||
        setIconToButton(delete, "deleteIcon.png");
 | 
					        setIconToButton(delete, "deleteIcon.png");
 | 
				
			||||||
        details.setOnAction(getGoToCropDetailEvent(crop));
 | 
					        details.setOnAction(getGoToCropDetailEvent(crop));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,11 +3,12 @@
 | 
				
			||||||
<?import javafx.geometry.Insets?>
 | 
					<?import javafx.geometry.Insets?>
 | 
				
			||||||
<?import javafx.scene.control.Button?>
 | 
					<?import javafx.scene.control.Button?>
 | 
				
			||||||
<?import javafx.scene.control.Label?>
 | 
					<?import javafx.scene.control.Label?>
 | 
				
			||||||
 | 
					<?import javafx.scene.control.ListView?>
 | 
				
			||||||
<?import javafx.scene.layout.AnchorPane?>
 | 
					<?import javafx.scene.layout.AnchorPane?>
 | 
				
			||||||
<?import javafx.scene.layout.VBox?>
 | 
					<?import javafx.scene.layout.VBox?>
 | 
				
			||||||
<?import javafx.scene.text.Font?>
 | 
					<?import javafx.scene.text.Font?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="655.0" prefWidth="1175.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.zhaw.gartenverwaltung.MyGardenController" fx:id="myGardenRoot">
 | 
					<AnchorPane fx:id="myGardenRoot" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="655.0" prefWidth="1175.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.zhaw.gartenverwaltung.MyGardenController">
 | 
				
			||||||
   <children>
 | 
					   <children>
 | 
				
			||||||
      <VBox layoutY="49.0" prefHeight="655.0" prefWidth="1175.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
 | 
					      <VBox layoutY="49.0" prefHeight="655.0" prefWidth="1175.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
 | 
				
			||||||
         <children>
 | 
					         <children>
 | 
				
			||||||
| 
						 | 
					@ -19,7 +20,7 @@
 | 
				
			||||||
                  <Insets bottom="10.0" />
 | 
					                  <Insets bottom="10.0" />
 | 
				
			||||||
               </VBox.margin>
 | 
					               </VBox.margin>
 | 
				
			||||||
            </Label>
 | 
					            </Label>
 | 
				
			||||||
            <VBox fx:id="myPlants_vbox" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="100.0" VBox.vgrow="ALWAYS" />
 | 
					            <ListView fx:id="myGarden_listView" maxHeight="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
 | 
				
			||||||
            <Button fx:id="addPlant_button" mnemonicParsing="false" onAction="#addPlant" prefHeight="45.0" prefWidth="155.0" text="Add new Plant">
 | 
					            <Button fx:id="addPlant_button" mnemonicParsing="false" onAction="#addPlant" prefHeight="45.0" prefWidth="155.0" text="Add new Plant">
 | 
				
			||||||
               <VBox.margin>
 | 
					               <VBox.margin>
 | 
				
			||||||
                  <Insets top="10.0" />
 | 
					                  <Insets top="10.0" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue