How to add value to elements in ComboBox in JavaFX

How to add value to items in a combo box, so when a user selects an item from ComboBox , I can display the price for this item

Eg. if the user selects an animal, I can display the price of this animal. the user selects dog , then I can display the price of $45 .

 public class comboBox extends Application { Stage window; Scene scene; Button button; ComboBox<String> comboBox; public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { window = primaryStage; window.setTitle("ComboBox"); button = new Button("Submit"); comboBox = new ComboBox<>(); comboBox.getItems().addAll( "cat", "dog", "bird" ); comboBox.setPromptText("Please select one"); button.setOnAction(e -> printPrice()); VBox layout = new VBox(10); layout.setPadding(new Insets(60, 60, 60, 60)); layout.getChildren().addAll(comboBox, button); scene = new Scene(layout, 450, 350); window.setScene(scene); window.show(); } private void printPrice(){ System.out.println(comboBox.getValue()); } } 

I tried to fix the code, and this is what I got there, there are still a few errors that someone knows what I'm doing wrong?

 import javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.collections.FXCollections; public class animals extends Application { Stage window; Scene scene; Button button; ComboBox<String> comboBox; public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { window = primaryStage; window.setTitle("ComboBox "); button = new Button("Submit"); comboBox.setConverter(new StringConverter<Animal>() { @Override public String toString(Animal object) { return object.getName(); } @Override public Animal fromString(String string) { return null; } }); ComboBox<Animal> comboBox = new ComboBox<Animal>(); comboBox.setItems(FXCollections.observableArrayList(new Animal("Dog", 30.12), new Animal("Cat", 23.23), new Animal("Bird", 15.0))); comboBox.valueProperty().addListener((obs, oldVal, newVal) -> System.out.println("Price of the " + newVal.getName() + " is : " + newVal.getPrice())); } VBox layout = new VBox(10); layout.setPadding(new Insets(60, 60, 60, 60)); layout.getChildren().addAll(comboBox, button); scene = new Scene(layout, 500, 350); window.setScene(scene); window.show(); } public class Animal { private String name; private Double price; public Double getPrice() { return price; } public String getName() { return name; } public Animal(String name, Double price) { this.name = name; this.price = price; } } 

Also, how could I show the price in the combo box after the user selects an animal? so he would say "price for this bestial value"

+5
source share
1 answer

You must provide a data model for the ComboBox that stores the name and price of the animal, such as instances of the Animal class.

 public class Animal { private String name; private Double price; public Double getPrice() { return price; } public String getName() { return name; } public Animal(String name, Double price) { this.name = name; this.price = price; } } 

Then in ComboBox you can display these instances of Animal :

 ComboBox<Animal> comboBox = new ComboBox<Animal>(); comboBox.setItems(FXCollections.observableArrayList( new Animal("Dog", 30.12), new Animal("Cat", 23.23), new Animal("Bird", 15.0))); comboBox.valueProperty().addListener((obs, oldVal, newVal) -> System.out.println("Price of the " + newVal.getName() + " is : " + newVal.getPrice())); 

It remains only to show the name of the animals on the ComboBox , and not on the objects themselves. For this you can use, for example, StringConverter :

 comboBox.setConverter(new StringConverter<Animal>() { @Override public String toString(Animal object) { return object.getName(); } @Override public Animal fromString(String string) { return null; } }); 

When changing the value, the output is as follows:

 Price of the Cat is : 23.23 Price of the Dog is : 30.12 Price of the Bird is : 15.0 

MCVE:

 public class Animals extends Application { private ComboBox<Animal> comboBox = new ComboBox<>(); private Text textNamePrice = new Text(); public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { comboBox.setConverter(new StringConverter<Animal>() { @Override public String toString(Animal object) { return object.getName(); } @Override public Animal fromString(String string) { return null; } }); comboBox.setItems(FXCollections.observableArrayList(new Animal("Dog", 30.12), new Animal("Cat", 23.23), new Animal("Bird", 15.0))); comboBox.valueProperty().addListener((obs, oldVal, newVal) -> { String selectionText = "Price of the " + newVal.getName() + " is : " + newVal.getPrice(); System.out.println(selectionText); textNamePrice.setText(selectionText); }); VBox layout = new VBox(10); layout.setPadding(new Insets(60, 60, 60, 60)); layout.getChildren().addAll(comboBox, textNamePrice); Scene scene = new Scene(layout, 500, 350); primaryStage.setScene(scene); primaryStage.show(); } public class Animal { private String name; private Double price; public Double getPrice() { return price; } public String getName() { return name; } public Animal(String name, Double price) { this.name = name; this.price = price; } } } 
+9
source

All Articles