JavaFX Elemente werden nicht zu TableView hinzugefügt

julianpe

Aktives Mitglied
Hallo,
ich habe folgendes Minimalbeispiel:
Controller.java:

Java:
public class Controller implements Initializable {
   
  
    @FXML
    private TableView<DataModel> resultTable = new TableView<DataModel>();
   
    final ObservableList<DataModel> TableData = FXCollections.observableArrayList();
   
   
    public void addToTable(String[] StrActualPath){
       
        // Alte Einträge löschen
        clearTable();
       

        DataModel dm = new DataModel(StrActualPath[1], StrActualPath[0]);
        TableData.add(dm);
        resultTable.refresh();
         
    }
   
    public void clearTable(){
       
        // Löscht die Eingaben
       
           TableData.clear();
           resultTable.refresh();
       
    }
   
 

   
    @Override
    public void initialize(URL url, ResourceBundle rb) {

      
        DataModel dm = new DataModel("Init Spalte 1","Init Spalte 2");
        TableData.add(dm);
        resultTable.setItems(TableData);
        resultTable.refresh();
  
       
    }   
   
}


DataModel.java
Java:
import javafx.beans.property.SimpleStringProperty;
public class DataModel {
   private final SimpleStringProperty Path = new SimpleStringProperty("");
   private final SimpleStringProperty Folder = new SimpleStringProperty("");


public DataModel() {
        this("", "");
    }
    public DataModel(String StrPath, String StrFolder) {
        setPath(StrPath);
        setFolder(StrFolder);
       
    }

    public String getPath() {
        return Path.get();
    }
    public void setPath(String StrPath) {
        Path.set(StrPath);
    }
       
    public String getFolder() {
        return Folder.get();
    }
   
    public void setFolder(String StrFolder) {
        Folder.set(StrFolder);
    }
   
}

Ich möchte gerne, dass die TableView Elemente mit Hilfe der Funktion addToTable() aufnimmt.
Jedoch funktioniert das nicht -> es werden keine Elemente in der Tabelle angezeigt.
An welcher Stelle hapert es in meinem Code?

Danke und Gruß
Julian
 
Ich hatte mir das FXML mit einer Column nachgebaut und kann es so nicht reproduzieren:
Java:
public class MyApplication extends Application {

    public static Stage primaryStage;

    @Override public void start(Stage stage) throws IOException {
        primaryStage = stage;
        FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
        Parent root = loader.load();
        Controller ctrl = loader.getController();
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] parameters) {
        launch(parameters);
    }
}
Java:
public class Controller implements Initializable {

    @FXML
    private TableView<DataModel> resultTable = new TableView<>();
    @FXML
    private TableColumn<DataModel, String> firstCol;

    final ObservableList<DataModel> tableData = FXCollections.observableArrayList();

    public void addToTable(String[] StrActualPath) {

        // Alte Einträge löschen
        clearTable();
        DataModel dm = new DataModel(StrActualPath[1], StrActualPath[0]);
        tableData.add(dm);
        resultTable.refresh();
    }

    public void clearTable() {

        // Löscht die Eingaben

        tableData.clear();
        resultTable.refresh();

    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        firstCol.setCellValueFactory(new PropertyValueFactory<>("path"));

        DataModel dm = new DataModel("Init Spalte 1", "Init Spalte 2");
        tableData.add(dm);
        resultTable.setItems(tableData);
        resultTable.refresh();
    }

    public void buttonPressed(ActionEvent actionEvent) {
        addToTable( new String[] {"Hell", "World"} );
    }
}
Java:
public class DataModel {
    private final SimpleStringProperty path = new SimpleStringProperty("");
    private final SimpleStringProperty folder = new SimpleStringProperty("");


    public DataModel() {
        this("", "");
    }
    public DataModel(String StrPath, String StrFolder) {
        setPath(StrPath);
        setFolder(StrFolder);

    }

    public String getPath() {
        return path.get();
    }
    public void setPath(String StrPath) {
        path.set(StrPath);
    }

    public String getFolder() {
        return folder.get();
    }

    public void setFolder(String StrFolder) {
        folder.set(StrFolder);
    }

}
Java:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller">
    <children>
        <Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" />
      <TableView fx:id="resultTable" layoutY="7.0" prefHeight="200.0" prefWidth="200.0">
        <columns>
          <TableColumn fx:id="firstCol" prefWidth="75.0" text="firstCol" />
        </columns>
      </TableView>
      <Button layoutX="268.0" layoutY="7.0" mnemonicParsing="false" onAction="#buttonPressed" text="Button" />
    </children>
</AnchorPane>
 

Zurück
Oben