JavaFX Edit TableView in Verbindung mit SceneBuilder

cheat.008

Aktives Mitglied
Hallo liebe Leute,

um Daten beim Editting von Tabellenzellen (der Spalte "Filmname") zu erhalten führe ich folgendes Prozedere durch:

Java:
public static TableColumn<Datensatz, String> filmNameCol = new TableColumn<>("Filmname");

filmNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
tableViewSearch.setEditable(true);
filmNameCol.setOnEditCommit(new
EventHandler<TableColumn.CellEditEvent<Datensatz,String>>()
       {
          
           @Override
           public void handle(CellEditEvent<Datensatz, String> editevent)
           {
               System.out.println(editevent.getNewValue());              
           }
       });

... und das funktioniert. Er printed mir den Wert, den man beim Edit eingegeben und mit ENTER bestätigt hat.

Nun folgendes:
Ich baue meine GUI eigentlich mit SceneBuilder auf (hätte auch kein Problem damit obigen Code zu nutzen), jedoch würde mich interessieren warum das vermeintliche SceneBuilder-"Äquivalent" nicht funktioniert (es wird nicht in die On Edit Commit Methode "getEditData" gesprungen nach der ENTER-Bestätigung):


Java:
public static TableColumn<Datensatz, String> filmNameCol = new TableColumn<>("Filmname");

filmNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
tableViewSearch.setEditable(true);

   @FXML
   public void getEditData(CellEditEvent<Datensatz, String> editevent)
   {      
           System.out.println(editevent.getNewValue());        
   }


FXML:
Code:
<TableColumn fx:id="filmNameCol" onEditCommit="#getEditData" prefWidth="75.0" text="Filmname" />

Kann mir jemand auf die Sprünge helfen?

Vielen Dank und einen schönen Tag

LG
 
Also ich kann es nicht reproduzieren:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.cell.TextFieldTableCell?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainController">
    <children>
        <TableView fx:id="tableView" layoutX="58.0" layoutY="109.0" prefHeight="200.0" prefWidth="200.0">
            <columns>
                <TableColumn fx:id="firstnameCol" onEditCommit="#firstnameEdited" prefWidth="75.0" text="Firstname">
                    <cellFactory>
                        <TextFieldTableCell fx:factory="forTableColumn" />
                    </cellFactory>
                    <cellValueFactory>
                        <PropertyValueFactory property="firstName"/>
                    </cellValueFactory>
                </TableColumn>
                <TableColumn prefWidth="75.0" text="Lastname">
                    <cellValueFactory>
                        <PropertyValueFactory property="lastName"/>
                    </cellValueFactory>
                </TableColumn>
            </columns>
        </TableView>
    </children>
</AnchorPane>
Java:
public class MainController {

    @FXML
    private TableView<Person> tableView;

    @FXML
    private TableColumn<Person, String> firstnameCol;

    public void initialize() {
        List<Person> items = Collections.nCopies(2, new Person("a", "b"));
        final ObservableList<Person> people = FXCollections.observableArrayList(items);
        tableView.setItems(people);
        tableView.setEditable(true);
    }

    public void firstnameEdited(TableColumn.CellEditEvent<Person, String> e) {
        System.out.println("ev new value: "+ e.getNewValue());

    }
}
Java:
import javafx.beans.property.SimpleStringProperty;

public class Person {
    private final SimpleStringProperty firstName = new SimpleStringProperty("");
    private final SimpleStringProperty lastName = new SimpleStringProperty("");

    public Person() {
        this("", "");
    }

    public Person(String firstName, String lastName) {
        setFirstName(firstName);
        setLastName(lastName);
    }

    public String getFirstName() {
        return firstName.get();
    }

    public void setFirstName(String fName) {
        firstName.set(fName);
    }

    public String getLastName() {
        return lastName.get();
    }

    public void setLastName(String fName) {
        lastName.set(fName);
    }
}
 

Zurück
Oben