Hallo,
ich will in einer Tabelle eine ComboBox verwenden um eine Zuordnung zu realisieren.
Dazu habe ich eine ObservableList für Personen und eine ObservableList für die Personenzuordnung.
Die Personen Liste will ich in der ComboBox anzeigen und die Personenzuordnungsliste für die Tabelle.
Hier meine ComboBoxTableCell Klasse:
[Java]
public static class ComboBoxTableCell<S, T> extends TableCell<S, T> {
private final ComboBox<Person> comboBox;
private ObservableValue<T> ov;
private ObservableList<PersonMapping> mappingList;
public ComboBoxTableCell(ObservableList<Person> personList, ObservableList<PersonMapping> mappingList) {
this.mappingList = mappingList;
this.comboBox = new ComboBox<Person>();
comboBox.setItems(personList);
setAlignment(Pos.CENTER);
setGraphic(comboBox);
}
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setGraphic(comboBox);
if (ov != null) {
if (ov.getValue() instanceof Person) {
Person person = ((Person) ov.getValue());
comboBox.getSelectionModel().select(person);
System.out.println("Select: " + person);
}
}
ov = getTableColumn().getCellObservableValue(getIndex());
if (ov.getValue() instanceof Person) {
final Person person = ((Person) ov.getValue());
System.out.println("Selected: " + person.toString());
comboBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
mappingList.get(getIndex()).setPerson2(comboBox.getSelectionModel().getSelectedItem());
System.out.println("Action: " +
"Person1: " + mappingList.get(getIndex()).getPerson1().toString() +
" Person2: " + mappingList.get(getIndex()).getPerson2().toString());
}
});
}
}
}
}
[/Java]
Diese Klasse funktioniert zwar aber ist es möglich das Objekt der MappingList aus der TableCell auszulesen?
Dies müsste ja in der Tabelle hinterlegt sein.
Und die setOnAction Methode der ComboBox ist diese nötig? Oder funktioniert dies auch mit irgend einen bind Property?
Im Anhang befindet sich der gesamte Source Code ausführbar.
godi
ich will in einer Tabelle eine ComboBox verwenden um eine Zuordnung zu realisieren.
Dazu habe ich eine ObservableList für Personen und eine ObservableList für die Personenzuordnung.
Die Personen Liste will ich in der ComboBox anzeigen und die Personenzuordnungsliste für die Tabelle.
Hier meine ComboBoxTableCell Klasse:
[Java]
public static class ComboBoxTableCell<S, T> extends TableCell<S, T> {
private final ComboBox<Person> comboBox;
private ObservableValue<T> ov;
private ObservableList<PersonMapping> mappingList;
public ComboBoxTableCell(ObservableList<Person> personList, ObservableList<PersonMapping> mappingList) {
this.mappingList = mappingList;
this.comboBox = new ComboBox<Person>();
comboBox.setItems(personList);
setAlignment(Pos.CENTER);
setGraphic(comboBox);
}
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setGraphic(comboBox);
if (ov != null) {
if (ov.getValue() instanceof Person) {
Person person = ((Person) ov.getValue());
comboBox.getSelectionModel().select(person);
System.out.println("Select: " + person);
}
}
ov = getTableColumn().getCellObservableValue(getIndex());
if (ov.getValue() instanceof Person) {
final Person person = ((Person) ov.getValue());
System.out.println("Selected: " + person.toString());
comboBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
mappingList.get(getIndex()).setPerson2(comboBox.getSelectionModel().getSelectedItem());
System.out.println("Action: " +
"Person1: " + mappingList.get(getIndex()).getPerson1().toString() +
" Person2: " + mappingList.get(getIndex()).getPerson2().toString());
}
});
}
}
}
}
[/Java]
Diese Klasse funktioniert zwar aber ist es möglich das Objekt der MappingList aus der TableCell auszulesen?
Dies müsste ja in der Tabelle hinterlegt sein.
Und die setOnAction Methode der ComboBox ist diese nötig? Oder funktioniert dies auch mit irgend einen bind Property?
Im Anhang befindet sich der gesamte Source Code ausführbar.
godi