Wie Sie einen DatePicker zu Tableview mit ein DatePickerCell
Ich habe hinzufügen ein DatePicker auf einen TableView mit der folgenden Klasse : https://code.google.com/p/javafx-filterable-table-columns/source/browse/src/main/java/thirdparty/eu/schudt/javafx/controls/calendar/DatePicker.java?r=db47db237b3342712aafb693f392d403455d5299
Verwende ich eine DatePickerCell Klasse ovveride TableCell. Das DatePicker-display gut in der TableView. Aber die updateItem-Methode funktioniert nicht gut, es aktualisiert nicht die ObservableList.
Was vermisse ich hier? Kann jemand konfrontiert selbe problem?
Hier ist mein code :
import java.text.SimpleDateFormat;
import java.util.Locale;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.control.TableCell;
import thirdparty.eu.schudt.javafx.controls.calendar.DatePicker;
public class DatePickerCell<S, T> extends TableCell<S, T> {
private final DatePicker datePicker;
private ObservableValue<T> ov;
public DatePickerCell() {
//Initialize the DatePicker for birthday
this.datePicker = new DatePicker(Locale.ENGLISH);
this.datePicker.setDateFormat(new SimpleDateFormat("dd/MM/yyyy"));
this.datePicker.getCalendarView().todayButtonTextProperty().set("Today");
this.datePicker.getCalendarView().setShowWeeks(false);
this.datePicker.getStylesheets().add("styles/DatePicker.css");
this.setAlignment(Pos.CENTER);
this.setGraphic(this.datePicker);
}
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
setGraphic(this.datePicker);
}
}
Und das Teil cellFactory in der FXController code :
@FXML
private TableColumn revueDateCol;
this.revueDateCol.setCellFactory(new Callback<TableColumn<Revue, Date>, TableCell<Revue, Date>>() {
@Override
public TableCell<Revue, Date> call(TableColumn<Revue, Date> arg0) {
return new DatePickerCell<>();
}
});
Danke für die Hilfe.
Ich habe versucht, implementiert diese Weise, aber wenn ich scrollen, muss die Zelle zurück auf den ursprünglichen Wert.
Irgendeine Idee ?
public class DatePickerCell<S, T> extends TableCell<Revue, Date> {
private DatePicker datePicker;
public DatePickerCell() {
if (datePicker == null) {
createDatePicker();
}
setGraphic(datePicker);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
Platform.runLater(new Runnable() {
@Override
public void run() {
datePicker.requestFocus();
}
});
}
@Override
public void updateItem(Date item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (datePicker != null) {
datePicker.setSelectedDate(getDate());
}
setGraphic(this.datePicker);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
}
private void createDatePicker() {
datePicker = new DatePicker(Locale.FRENCH);
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
datePicker.setDateFormat(formatter);
datePicker.setPromptText("jj/mm/aaaa");
datePicker.getCalendarView().todayButtonTextProperty().set("Aujourd'hui");
datePicker.getCalendarView().setShowWeeks(false);
datePicker.getStylesheets().add("/styles/datePicker.css");
datePicker.selectedDateProperty().addListener(
new ChangeListener<Date>() {
@Override
public void changed(ObservableValue<? extends Date> observable,
Date oldValue, Date newValue) {
commitEdit(newValue);
}
});
setAlignment(Pos.CENTER);
}
private Date getDate() {
return datePicker.getSelectedDate() != null ? datePicker.getSelectedDate() : getItem();
}
@Override
public void startEdit() {
super.startEdit();
}
@Override
public void cancelEdit() {
super.cancelEdit();
setContentDisplay(ContentDisplay.TEXT_ONLY);
}
}
Grüße,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Lösung, die funktionieren. Es verwendet einen DatePicker und TableView-Steuerelement mit Java 8.
Der blog-post ist verfügbar hier.
Machen tableView bearbeitet werden, müssen Sie
tableView.setEditable(true)
.überschreiben Sie die
startEdit()
,cancelEdit()
Methoden derTableCell
.legen Sie die
revueDateCol.setOnEditCommit()
des zugehörigenTableColumn
.aufrufen
commitEdit()
wenn die Bearbeitung abgeschlossen ist.Beispiel ist offizielle tutorial für Tabellenansicht, Beispiel 12-11: Alternative Lösung Von der Zelle Bearbeiten.
Die ersten drei oben genannten Schritte sind nahezu identisch, außer, dass Sie mit DatePicker statt TextField.
Der Letzte Schritt kann als: