JavaFX Propriétés dans TableView
J'apprends à travailler avec JavaFX des propriétés au sein de la TableView et éprouve de la difficulté avec certains types de biens. J'ai un objet Personne qui contient deux propriétés
public class Person {
private final StringProperty firstName;
private final IntegerProperty age;
public Person(String firstName, Integer age) {
this.firstName = new SimpleStringProperty(firstName);
this.age = new SimpleIntegerProperty(age);
}
public Integer getAge() {
return age.get();
}
public void setAge(Integer age) {
this.age.set(age);
}
public IntegerProperty ageProperty() {
return age;
}
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String firstName) {
this.firstName.set(firstName);
}
public StringProperty firstNameProperty() {
return firstName;
}
}
Une fois créé par objectif est d'utiliser cet objet dans une TableView. J'ai créé les deux colonnes du tableau comme ceci.
TableColumn<Person, String> firstNameColumn = new TableColumn<Person, String>("First Name");
TableColumn<Person, Integer> ageColumn = new TableColumn<Person, Integer>("Age");
Je veux définir la valeur de la cellule d'usine en utilisant les expressions Lambda. C'est là que le problème se pose. Le StringProperty prénom fonctionne très bien. Cependant, la IntegerProperty me donne le message d'erreur "incompatibilité de Type: impossible de convertir de IntegerProperty
à ObservableValue<Integer>
"
firstNameColumn.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty());
ageColumn.setCellValueFactory(cellData -> cellData.getValue().ageProperty());
Quelqu'un peut jeter un peu de lumière sur ce qui va mal avec la ageColumn.setCellValueFactory(...)? Toute aide serait grandement appréciée.
Merci!
Vous devez vous connecter pour publier un commentaire.
Un peu étrange partie de la propriété de l'API, c'est que
IntegerProperty
implémenteObservableValue<Number>
, pasObservableValue<Integer>
. Donc, un peu contre toute attente intuitive, vous devezComme un de côté, et je ne suis pas sûr si cela pose des problèmes, mais il est plus courant d'utiliser
int
au lieu deInteger
pour le type de retour de la méthode get et le type de paramètre de la méthode de jeu dans votre classe de modèle. Ces dernières correspondent aux types deIntegerProperty.get()
etIntegerProperty.set(...)
, jusqu'à ce qu'il évite certains implicite auto (de l'onu)de la boxe.vous pouvez utiliser .asObject Méthode pour faire de votre code du travail
il n'a pas besoin de changer de l'TableColumn Paramater Nombre
idk quel est le meilleur code,
modifier le paramètre de Nombre ou de l'utilisation asObject Méthode
Lien
Pour le type de Chaîne :
Lorsque vous souhaitez utiliser
IntegerProperty
ouDoubleProperty
, lesetCellValueFactory(...)
doit ont un supplément deasObject()
:Cela est nécessaire en raison d'une mauvaise conception de la décision de JavaFX.
Source et crédits