Comment puis-je ajouter une valeur à des éléments dans une liste déroulante en JavaFX
Comment puis-je ajouter de la valeur à des éléments dans une liste déroulante ainsi, lorsque l'utilisateur sélectionne un élément de la ComboBox
je suis en mesure d'afficher le prix de cet élément de
Par exemple. si l'utilisateur sélectionne un animal, je peux afficher le prix de cet animal. L'
l'utilisateur sélectionne dog
alors je peux afficher le prix de $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());
}
}
J'ai essayé de corriger le code et c'est ce que j'ai obtenu il y a encore quelques erreurs de quelqu'un sait ce que je fais de mal?
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;
}
}
aussi, comment pourrais-je être en mesure d'afficher les prix dans la zone de liste modifiable une fois que l'utilisateur sélectionne un animal? donc, il serait de dire "le prix pour que les animaux de coût"
OriginalL'auteur user6587841 | 2016-07-14
Vous devez vous connecter pour publier un commentaire.
Vous devez fournir un modèle de données pour la
ComboBox
qui stocke le nom et le prix de l'animal, par exemple les instances de la classeAnimal
.Puis dans votre
ComboBox
vous pouvez afficher cesAnimal
instances:La seule chose à gauche pour afficher le nom de l'animal sur le
ComboBox
plutôt que les objets lui-même. Pour ce faire, vous pouvez utiliser par exemple unStringConverter
:Sur changement de valeur, la sortie est identique:
Un MCVE:
oui, vous devez importer les
javafx.collections.FXCollections
.J'ai une erreur maintenant les animaux.java:52: erreur: classe Animal est public, doit être déclarée dans un fichier nommé Animal.java
public class Animal {
Puis faire ce que l'erreur l'indique, de créer un Animal.java fichier et copier la classe 🙂
ajouté l'exemple complet pour vous.
OriginalL'auteur DVarga