JavaFX TableView Wert in Spalte ändern

graga

Neues Mitglied
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.

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]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
M JavaFX berechneten Wert in TableView schreiben AWT, Swing, JavaFX & SWT 1
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
Encera TableView Zeilen als Spalten im SceneBuilder AWT, Swing, JavaFX & SWT 0
T TableView Button onAction AWT, Swing, JavaFX & SWT 3
mrbody234 ArrayList<Message> in eine TableView visualisieren AWT, Swing, JavaFX & SWT 2
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
A Mit JavaFX einzelne Zeilen in TableView farbig markieren AWT, Swing, JavaFX & SWT 5
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
A TableView updatet sich nicht AWT, Swing, JavaFX & SWT 3
missy72 JavaFX TableView Spalte zwischen den Zeilen AWT, Swing, JavaFX & SWT 5
W TableView füllen AWT, Swing, JavaFX & SWT 18
missy72 JavaFX TableView / IconView mit MousEvent AWT, Swing, JavaFX & SWT 7
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
T TableView Zeilen einfärben AWT, Swing, JavaFX & SWT 13
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
D JavaFX Nullpointerexception wegen TableView AWT, Swing, JavaFX & SWT 2
S Alternative JavaFX TableView AWT, Swing, JavaFX & SWT 1
L JavaFX Tableview row callback AWT, Swing, JavaFX & SWT 0
G Bekomme ResultSet mittels ObservableList nicht ins TableView AWT, Swing, JavaFX & SWT 25
S JavaFX JavaFX TableView scrollen färbt falsche Zeilen AWT, Swing, JavaFX & SWT 1
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J JavaFx TableView mit CheckBox AWT, Swing, JavaFX & SWT 4
P JavaFX TableView Zelle markieren AWT, Swing, JavaFX & SWT 3
L JavaFX Tableview Datamodel AWT, Swing, JavaFX & SWT 2
M TableView Zeile hinzufügen AWT, Swing, JavaFX & SWT 5
J TableView Update/Refresh CPU AWT, Swing, JavaFX & SWT 2
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
M TableView + Datenbank Aktualisierung AWT, Swing, JavaFX & SWT 4
B TableView als PDF speichern AWT, Swing, JavaFX & SWT 8
B JavaFX TableView eine Zeile markieren AWT, Swing, JavaFX & SWT 5
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
L JavaFX TableView Column Sortierung AWT, Swing, JavaFX & SWT 1
L Java FX Keine Anzeige Im Tableview AWT, Swing, JavaFX & SWT 4
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
L JavaFX TableView mit Aktionenbuttons AWT, Swing, JavaFX & SWT 1
C JavaFX Edit TableView in Verbindung mit SceneBuilder AWT, Swing, JavaFX & SWT 1
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
J SceneBuilder TableView Checkbox AWT, Swing, JavaFX & SWT 1
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
F JavaFX (Tree)TableView korrekt drucken AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
S JavaFx - ausgewählte Rows in Arraylist (Tableview) AWT, Swing, JavaFX & SWT 4
S JavaFX - Populate TableView AWT, Swing, JavaFX & SWT 2
N JavaFX TableView aus Map AWT, Swing, JavaFX & SWT 2
J TableView Daten werden nicht ausgegeben AWT, Swing, JavaFX & SWT 9
B JavaFX TableView aus Collection befüllen AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
zhermann TableView die zweite AWT, Swing, JavaFX & SWT 7
H Java FX List<AlbumsBean> in FXML TableView AWT, Swing, JavaFX & SWT 37
E JavaFX TableView mit Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 5
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
M JavaFX JavaFX ResultSet in TableView ausgeben AWT, Swing, JavaFX & SWT 2
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
K JavaFX Message in TableView AWT, Swing, JavaFX & SWT 2
H TableView mit variabler Anzahl Spalten AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
L JavaFX TableView mit Excelfunktion AWT, Swing, JavaFX & SWT 1
D JavaFX TableView AWT, Swing, JavaFX & SWT 2
L JavaFX TableView mit XYChart verbinden AWT, Swing, JavaFX & SWT 3
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
P JavaFX, TableView und Datenbank AWT, Swing, JavaFX & SWT 4
K TableView: 'Komplexes' Object AWT, Swing, JavaFX & SWT 11
L JavaFX TableView background transparent machen AWT, Swing, JavaFX & SWT 7
F TableCell aus TableView holen AWT, Swing, JavaFX & SWT 8
K JavaFX TableView mit Rectangle AWT, Swing, JavaFX & SWT 3
M Befüllung der einzelnen Zeilen des TableView AWT, Swing, JavaFX & SWT 3
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
N JavaFX TableView füllt nicht das gesamte ScrollPanle aus AWT, Swing, JavaFX & SWT 2
M JavaFX TableView & CSS, Rand um Tabellenkopf entfernen AWT, Swing, JavaFX & SWT 3
L JavaFX ListView oder TableView Style überschreiben? AWT, Swing, JavaFX & SWT 6
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
J JavaFX TableView - Höhe der Zeilen AWT, Swing, JavaFX & SWT 3
L JavaFX TableView mit Attributs der Modellreferenzerierung für die Spalte AWT, Swing, JavaFX & SWT 3
I JavaFX Buttons und TableView AWT, Swing, JavaFX & SWT 2
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
B Java FX TableView Zeilen mit verschiedenen Typen AWT, Swing, JavaFX & SWT 15
Z JavaFX TableView cellValueFactory für Arrays AWT, Swing, JavaFX & SWT 2
E JavaFX TableView mit Rechtsklick Zelle auswählen AWT, Swing, JavaFX & SWT 8
C (JavaFX 8) SQLite Datenbank in einem TableView darstellen AWT, Swing, JavaFX & SWT 2
D JavaFX TableView bleibt leer. AWT, Swing, JavaFX & SWT 8
M JavaFX TableView nach Spalte sortieren AWT, Swing, JavaFX & SWT 1
P JavaFX Dynamische TableView AWT, Swing, JavaFX & SWT 14
V Java FX POJO aus Datenbank in FX TableView / Best Practice AWT, Swing, JavaFX & SWT 0
P JavaFX TableView Item hinzufügen AWT, Swing, JavaFX & SWT 20
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
M JavaFX Tutorial zu Tableview AWT, Swing, JavaFX & SWT 5
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben