Hallo,
ich will gerne ein Wert in eine Spalte ändern können.
https://docs.oracle.com/javafx/2/ui_controls/table-view.htm hier steht geschrieben wie es geht, aber bei mir klappt es denoch nicht, und wollte fragen, was ich da falsch gemacht habe.
Die Spalte "anzahl" sollte änderbar sein.
ich will gerne ein Wert in eine Spalte ändern können.
https://docs.oracle.com/javafx/2/ui_controls/table-view.htm hier steht geschrieben wie es geht, aber bei mir klappt es denoch nicht, und wollte fragen, was ich da falsch gemacht habe.
Die Spalte "anzahl" sollte änderbar sein.
Java:
import java.net.URL;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Optional;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.util.Callback;
import javafx.util.converter.IntegerStringConverter;
/**
* FXML Controller class
*
*/
public class AuftragAnlegenController implements Initializable {
private ObservableList<AuftragAnlegen> auftrag = FXCollections.observableArrayList();
private ObservableList<ArtikelAnlegen> artikel = FXCollections.observableArrayList();
private HauptfensterController mainApp;
@FXML
private TextField auftragID;
public Stage primaryStage;
private boolean ist = true;
private int zaehler = 1;
@FXML
private Button buttonOkay, buttonAbbrechen, buttonHinzufuegen, buttonBearbeiten, buttonEntfernen;
@FXML
private DatePicker datePicker;
@FXML
private TextField textFeldauftrageberKunde, textFeldBestellnummer, textFeldStatus;
private String tfAusgabe;
@FXML
private TableColumn<ArtikelAnlegen, String> artikelid;
@FXML
private TableColumn<ArtikelAnlegen, String> artikelbezeichnung;
@FXML
private TableColumn<ArtikelAnlegen, Integer> anzahl;
@FXML
private TableColumn<ArtikelAnlegen, String> einzelpreis;
@FXML
private TableColumn<ArtikelAnlegen, String> gesamtpreisPosition;
@FXML
private TableView<ArtikelAnlegen> tabelle;
public void setPrimaryStage(Stage stage) {
this.primaryStage = stage;
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
if (wurdeGeschrieben()) {
primaryStage.close();
} else {
event.consume();
primaryStage.show();
}
}
});
}
public void setAuftragArray(ObservableList<AuftragAnlegen> auftrag) {
this.auftrag = auftrag;
}
public void setAuftragZaehler(int zaehler) {
this.auftragID.setText("AU" + Calendar.getInstance().get(Calendar.YEAR) + zaehler);
}
public void setMainApp(HauptfensterController mainApp) {
this.mainApp = mainApp;
}
@Override
public void initialize(URL url, ResourceBundle rb) {
this.auftragID.setText("AU2017" + zaehler);
this.datePicker.getEditor().setTextFormatter(new TextFormatter(new FilterDatum()));
this.datePicker.setValue(LocalDate.now());
this.textFeldBestellnummer.setPromptText("zz/zzzz");
this.textFeldBestellnummer.setTextFormatter(new TextFormatter<>(new Bestellnummer()));
// this.textFeldauftrageberKunde.setTextFormatter(new TextFormatter<>(new NachnameUndVorname()));
ArtikelAnlegen artikel1 = new ArtikelAnlegen("A2323", "Werkzeug", 2, "5.5", "11");
ArtikelAnlegen artikel2 = new ArtikelAnlegen("Awe", "Werkzeug", 2, "5.5", "11");
artikel.add(artikel1);
artikel.add(artikel2);
// tabelle.setEditable(true);
//
// anzahl.setOnEditCommit((CellEditEvent<ArtikelAnlegen, Integer> event) -> {
// TablePosition<ArtikelAnlegen, Integer> pos = event.getTablePosition();
//
// Integer newFullName = event.getNewValue();
//
// int row = pos.getRow();
// ArtikelAnlegen artikel = event.getTableView().getItems().get(row);
//
// artikel.setAnzahl(newFullName);
// });
// anzahl.setCellFactory();
anzahl.setOnEditCommit(
new EventHandler<CellEditEvent<ArtikelAnlegen, Integer>>() {
@Override
public void handle(CellEditEvent<ArtikelAnlegen, Integer> t) {
((ArtikelAnlegen) t.getTableView().getItems().get(
t.getTablePosition().getRow())).setAnzahl(t.getNewValue());
}
}
);
artikelid.setCellValueFactory(new PropertyValueFactory<ArtikelAnlegen, String>("artikelid"));
artikelbezeichnung.setCellValueFactory(new PropertyValueFactory<ArtikelAnlegen, String>("bezeichnung"));
anzahl.setCellValueFactory(new PropertyValueFactory<ArtikelAnlegen, Integer>("anzahl"));
einzelpreis.setCellValueFactory(new PropertyValueFactory<ArtikelAnlegen, String>("einzelpreis"));
gesamtpreisPosition.setCellValueFactory(new PropertyValueFactory<ArtikelAnlegen, String>("gesamtpreis"));
tabelle.setItems(artikel);
datePicker.valueProperty().addListener(new ChangeListener<LocalDate>() {
@Override
public void changed(ObservableValue<? extends LocalDate> observable, LocalDate oldValue, LocalDate newValue) {
// neuer Wert null -> in Ordnung
if (newValue == null) {
return;
}
// neuer Wert nicht null -> Datum auf Zukunft prüfen
if ((newValue.compareTo(LocalDate.now())) < 0) {
Alert meldung = new Alert(Alert.AlertType.WARNING);
meldung.setHeaderText("");
meldung.setTitle("Unzulässiges Datum");
meldung.setContentText("Datum kann nicht in der Vergangenheit liegen und es wird auf das letzte gültige Datum zurückgesetzt.");
meldung.showAndWait();
datePicker.setValue(oldValue);
datePicker.requestFocus();
}
}
});
}
public boolean formularSpeichern() {
ist = true;
if (this.textFeldauftrageberKunde.getText().equals("")) {
ist = false;
showInformationAlert("Bitte tragen Sie Auftraggeber/Kunde ein ");
this.textFeldauftrageberKunde.requestFocus();
} else if (this.textFeldBestellnummer.getText().equals("")) {
ist = false;
showInformationAlert("Bitte tragen Sie Bestellnummer ein ");
this.textFeldBestellnummer.requestFocus();
} else if (this.textFeldBestellnummer.getText().length() < 7) {
ist = false;
showInformationAlert("Bestellnummer muss 6 lang sein und nach diesem Schema erfolgen: zz/zzzz ");
this.textFeldBestellnummer.requestFocus();
}
return ist;
}
public boolean wurdeGeschrieben() {
ist = true;
// String date = this.datePicker.get();
if (!this.textFeldauftrageberKunde.getText().equals("")
|| !this.textFeldBestellnummer.getText().equals("")
|| this.datePicker.getValue().compareTo(LocalDate.now()) != 0) {
ist = false;
showConfirmationAlert();
}
// if(!this.textFeldauftrageberKunde.getText().equals("")){
// ist=false;
// showConfirmationAlert();
// }else if(!this.textFeldBestellnummer.getText().equals("")){
// ist=false;
// showConfirmationAlert();
// }
// if(date.compareTo(this.datePicker.getValue()) != 0){
// ist=false;
// showConfirmationAlert();
// }
return ist;
}
private void showConfirmationAlert() {
// Alert meldung = new Alert(Alert.AlertType.CONFIRMATION);
Alert meldung = new Alert(Alert.AlertType.CONFIRMATION, "Wollen Sie wirklich beenden?", ButtonType.NO, ButtonType.YES);
/* Aenderung der Modalitaet auf eine "nicht-modale" Meldung. */
// meldung.initModality(Modality.NONE);
/* "Entfernt" den Header und setzt das Symbol links vom Inhalt. */
meldung.setHeaderText("");
meldung.setTitle("Formular Abbrechen");
// meldung.setContentText(CONFIRMATION_TEXT);
// meldung.show(); //Programm laeuft weiter
// System.out.println("Programm läuft weiter");
Optional<ButtonType> antwort = meldung.showAndWait(); // Programm wartet vor naechster Zeile
if (antwort.isPresent()) {
if (antwort.get().equals(ButtonType.YES)) {
/* Anwendung schliessen. */
ist = true;
} else {
ist = false;
}
}
}
private void showInformationAlert(String meldung2) {
Alert meldung = new Alert(Alert.AlertType.WARNING);
// Image image = new Image("/ok.png");
// ImageView imageScale = new ImageView(image);
// imageScale.setFitHeight(20);
// imageScale.setFitWidth(20);
// meldung.setGraphic(imageScale);
meldung.setHeaderText("");
meldung.setTitle("Die Angabe ist unvollständig");
meldung.setContentText(meldung2);
meldung.showAndWait();
}
@FXML
private void handleAbbrechen(ActionEvent event) {
if (wurdeGeschrieben()) {
this.primaryStage.close();
}
}
@FXML
private void handleOkay(ActionEvent event) {
if (formularSpeichern()) {
AuftragAnlegen a1 = new AuftragAnlegen();
a1.setAuftragID(this.auftragID.getText());
a1.setAuftragGeberKunde(this.textFeldauftrageberKunde.getText());
a1.setBestellnummer(this.textFeldBestellnummer.getText());
this.mainApp.gibAuftragListe().add(a1);
this.primaryStage.close();
}
}
@FXML
private void handleBearbeiten(ActionEvent event) {
// anzahl.setCellFactory(TextFieldTableCell.<ArtikelAnlegen, Integer>
// forTableColumn(new IntegerStringConverter()));
//anzahl.setOnEditCommit(
// new EventHandler<CellEditEvent<ArtikelAnlegen, Integer> >() {
// @Override
// public void handle(CellEditEvent<ArtikelAnlegen, Integer> evt) {
// Integer neuWert = evt.getNewValue();
// evt.getTableView().getItems().get(
// evt.getTablePosition().getRow())
// .setAnzahl(neuWert);
// // Punktzahl wurde geändert: neu sortieren!
//
// }
// }
//);
// anzahl.setOnEditCommit(event - > {
//
// final ArtikelAnlegen value = event.getNewValue() != null ? event.getAnzahl() :
//
// event.getOldValue();
//
// ((ArtikelAnlegen) event.getTableView().getItems()
//
// .get(event.getTablePosition().getRow()))
//
// .setAnzahl(value);
//
// tabelle.refresh();
//
//
//
//
//
anzahl.setOnEditCommit((CellEditEvent<ArtikelAnlegen, Integer> even) -> {
TablePosition<ArtikelAnlegen, Integer> pos = even.getTablePosition();
Integer newFullName = even.getNewValue();
int row = pos.getRow();
ArtikelAnlegen artikel = even.getTableView().getItems().get(row);
artikel.setAnzahl(newFullName);
});
}
@FXML
private void handleEntfernen(ActionEvent event) {
}
}
[/QUOTE]