Hallo,
da der Aufbau eines TableViews sich änderte beim Wechsel von Swing auf JavaFX, benutze ich ein relativ simples Prinzip für die Standardmäßige Wiederverwendung eines Tables (d.h. TableView<Object[]> TableView),d.h. in diesem Fall arbeite ich sehr wenig Objektorientiert.
Da ich nur rudimentär mit der Oberflächenprogrammierung vertraut bin habe ich mich damals für diese funktionierende Variante entschieden.
Mein Problem besteht nun darin, dass ich bei der Verwendung von Boolean.class in einer Column zwar die CheckBox reinbekomme, mein
Listener aber nicht updatet. Bei String.class-Columns verwende ich aktuell:
Das funktioniert. Die Methode setValueAt(..) überschreibt das jeweilige item an der Stelle und Zeile (ObservableList<Object[]> items = this.TableView.getItems()).
Die gleiche Variante für die Boolean.class mit
reagiert nicht, d.h. die handle Methode wird nicht ausgeführt beim Klicken der CheckBox im Table.
Hierzu habe ich immer mal wieder Versuche gestartet dies zu ändern, leider ohne Erfolg. Da ich wichtigere Aufgabe zu erledigen habe, verwerfe ich es
dann immer wieder. Deswegen hier meine Frage an Leute die sich damit auskennen:
Gibt es hier eine schnelle einfache Variante diese Ausführung zu erreichen, sodass die CheckBox Werte im TableView angepasst werden und die CheckBox updated?
Versuche wie
führten hierbei auch zu keinem Erfolg. Bei dieser Variante reagiert die Cell zwar auf Clicks, itemBoolean ist allerdings immer false und
es lässt sich auch hier kein Haken setzen bei der CB.
Hilfe hierzu wäre sehr nett, da ich aktuell in meinem Programm immer true/false Werte in einer String.class-Column verwende und mich das mittlerweile extrem nervt..
da der Aufbau eines TableViews sich änderte beim Wechsel von Swing auf JavaFX, benutze ich ein relativ simples Prinzip für die Standardmäßige Wiederverwendung eines Tables (d.h. TableView<Object[]> TableView),d.h. in diesem Fall arbeite ich sehr wenig Objektorientiert.
Da ich nur rudimentär mit der Oberflächenprogrammierung vertraut bin habe ich mich damals für diese funktionierende Variante entschieden.
Mein Problem besteht nun darin, dass ich bei der Verwendung von Boolean.class in einer Column zwar die CheckBox reinbekomme, mein
Listener aber nicht updatet. Bei String.class-Columns verwende ich aktuell:
Code:
TC.setCellFactory(TextFieldTableCell.forTableColumn());
TC.setOnEditCommit(new EventHandler<CellEditEvent<Object[], String>>() {
@Override
public void handle(CellEditEvent<Object[], String> Edit) {
TablePosition<Object[], String> TP = Edit.getTablePosition();
Object Wert = Edit.getNewValue();
int Row = TP.getRow(), Col = TP.getColumn();
setValueAt(String.valueOf(Wert), Row, Kopfzeile[Col], true);
}
});
Das funktioniert. Die Methode setValueAt(..) überschreibt das jeweilige item an der Stelle und Zeile (ObservableList<Object[]> items = this.TableView.getItems()).
Die gleiche Variante für die Boolean.class mit
Code:
TC.setCellFactory(new CheckBoxCellFactory());
TC.setOnEditCommit(new EventHandler<CellEditEvent<Object[], String>>() {
@Override
public void handle(CellEditEvent<Object[], String> Edit) {
TablePosition<Object[], String> TP = Edit.getTablePosition();
Object Wert = Edit.getNewValue();
int Row = TP.getRow(), Col = TP.getColumn();
setValueAt(String.valueOf(Wert), Row, Kopfzeile[Col], true);
}
});
reagiert nicht, d.h. die handle Methode wird nicht ausgeführt beim Klicken der CheckBox im Table.
Hierzu habe ich immer mal wieder Versuche gestartet dies zu ändern, leider ohne Erfolg. Da ich wichtigere Aufgabe zu erledigen habe, verwerfe ich es
dann immer wieder. Deswegen hier meine Frage an Leute die sich damit auskennen:
Gibt es hier eine schnelle einfache Variante diese Ausführung zu erreichen, sodass die CheckBox Werte im TableView angepasst werden und die CheckBox updated?
Versuche wie
Code:
TC.setCellFactory(col -> {
CheckBoxTableCell<TableViewCheckBox.Item, Boolean> cell = new CheckBoxTableCell<>(index -> {
boolean T = (boolean) Boolean.valueOf(TableView.getItems().get(index)[Col].toString());
return new SimpleBooleanProperty(true);
});
Callback<Integer, ObservableValue<Boolean>> Call = new Callback<Integer, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(Integer index) {
String itemBoolean = (String) TableView.getItems().get(index)[Col];
ObservableValue<Boolean> o = new ReadOnlyObjectWrapper<>(Boolean.valueOf(true));
Print(itemBoolean);
return o;
}
};
cell.setSelectedStateCallback(Call);
TC.setCellFactory(CheckBoxTableCell.forTableColumn(Call));
return cell;
});
führten hierbei auch zu keinem Erfolg. Bei dieser Variante reagiert die Cell zwar auf Clicks, itemBoolean ist allerdings immer false und
es lässt sich auch hier kein Haken setzen bei der CB.
Hilfe hierzu wäre sehr nett, da ich aktuell in meinem Programm immer true/false Werte in einer String.class-Column verwende und mich das mittlerweile extrem nervt..