TableView updatet sich nicht

AgentP

Mitglied
Hallo, ich habe eine TableView mit Produkten drin. Die Produkte sind in einer Arraylist und werden dann in der TableView geladen. Das funktioniert auch bei der Initialisierung der TableView. Wenn ich aber mit einem Button ein neues Produkt erstellen möchte (Attribute werden in Textfelder geschrieben), wird das neue Produkt auch in der Arraylist gespeichert aber nicht auf der TableView angezeigt. Ich weiß einfach nicht was ich da falsch mache.

table.getItems().clear();
table.getItems().addAll(products);
table.refresh();

habe ich schon ausprobiert, aber da geht auch nicht. ._.

Ich hoffe jemand kann mir helfen
MfG


Java:
public class TableController implements Initializable {

    @FXML
    protected TableView<Products> table = new TableView<>();
    protected ArrayList<Products> products = new ArrayList<>();
    
        
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

        TableColumn<Products, Integer> id = new TableColumn<>("ID");
        id.setMinWidth(100);
        id.setCellValueFactory(new PropertyValueFactory<>("id"));
        id.setSortable(false);

        TableColumn<Products, String> name = new TableColumn<>("Name");
        name.setMinWidth(100);
        name.setCellValueFactory(new PropertyValueFactory<>("name"));
        name.setSortable(false);

        TableColumn<Products, Double> preis = new TableColumn<>("Preis");
        preis.setMinWidth(100);
        preis.setCellValueFactory(new PropertyValueFactory<>("preis"));
        preis.setSortable(false);

        TableColumn<Products, Double> menge = new TableColumn<>("Menge");
        menge.setMinWidth(100);
        menge.setCellValueFactory(new PropertyValueFactory<>("menge"));
        menge.setSortable(false);

        TableColumn<Products, Category> kat = new TableColumn<>("Kategorie");
        kat.setMinWidth(100);
        kat.setCellValueFactory(new PropertyValueFactory<>("kategorie"));
        kat.setSortable(false);
        
        
        createProducts();
        table.setItems(FXCollections.observableArrayList(products));
        table.getColumns().addAll(id, name, preis, menge, kat);

    }


    public void createProducts() {
        
        products.add(new Products(1, "test", 0, 3300, Category.Grafikkarte));

    }


Java:
   @FXML
    public void produktHinzufuegen() {

        if (id.getText() != "" && name.getText() != "" && preis.getText() != "" && menge.getText() != "") {

            products.add(new Products(Integer.parseInt(id.getText()), name.getText(),
                                      Integer.parseInt(preis.getText()),Double.parseDouble(menge.getText()),
                                      Category.Notebook));
        }
        
        
        for (int i = 0; i < products.size(); i++) {

            System.out.println(products.get(i).getName());
        }
    }
 
protected ArrayList<Products> products = new ArrayList<>();
dsa umändern auf
protected ObservableList products = table.getItems();


damit beziehst du dich schon auf die Array List die innerhalb des Objektes liegt was das ganze einfacher macht


im Moment fügst du es deiner array List hinzu und dann passiert gar nix mehr

ka wie ich es erklären sollte ohne eine Lösung zu nennen

typen sicherheit musst du dir selber zusammen bauen



du solltest darüber denken was ich gmeacht habe...wenn du esn icht verstehst musst du nachfragen


ob du überhaupt items erstellst die angezeigt werden können ist halt auch eine frage aber da muss ich sagen bin ich zu faul das irgendwie nach zu basteln wenn so wenig code vorliegt
 
Zuletzt bearbeitet von einem Moderator:
Hallo, ich habe eine TableView mit Produkten drin. Die Produkte sind in einer Arraylist und werden dann in der TableView geladen. Das funktioniert auch bei der Initialisierung der TableView. Wenn ich aber mit einem Button ein neues Produkt erstellen möchte (Attribute werden in Textfelder geschrieben), wird das neue Produkt auch in der Arraylist gespeichert aber nicht auf der TableView angezeigt. Ich weiß einfach nicht was ich da falsch mache.

table.getItems().clear();
table.getItems().addAll(products);
table.refresh();

habe ich schon ausprobiert, aber da geht auch nicht. ._.

Ich hoffe jemand kann mir helfen
MfG


Java:
public class TableController implements Initializable {

    @FXML
    protected TableView<Products> table = new TableView<>();
    protected ArrayList<Products> products = new ArrayList<>();
   
       
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

        TableColumn<Products, Integer> id = new TableColumn<>("ID");
        id.setMinWidth(100);
        id.setCellValueFactory(new PropertyValueFactory<>("id"));
        id.setSortable(false);

        TableColumn<Products, String> name = new TableColumn<>("Name");
        name.setMinWidth(100);
        name.setCellValueFactory(new PropertyValueFactory<>("name"));
        name.setSortable(false);

        TableColumn<Products, Double> preis = new TableColumn<>("Preis");
        preis.setMinWidth(100);
        preis.setCellValueFactory(new PropertyValueFactory<>("preis"));
        preis.setSortable(false);

        TableColumn<Products, Double> menge = new TableColumn<>("Menge");
        menge.setMinWidth(100);
        menge.setCellValueFactory(new PropertyValueFactory<>("menge"));
        menge.setSortable(false);

        TableColumn<Products, Category> kat = new TableColumn<>("Kategorie");
        kat.setMinWidth(100);
        kat.setCellValueFactory(new PropertyValueFactory<>("kategorie"));
        kat.setSortable(false);
       
       
        createProducts();
        table.setItems(FXCollections.observableArrayList(products));
        table.getColumns().addAll(id, name, preis, menge, kat);

    }


    public void createProducts() {
       
        products.add(new Products(1, "test", 0, 3300, Category.Grafikkarte));

    }


Java:
   @FXML
    public void produktHinzufuegen() {

        if (id.getText() != "" && name.getText() != "" && preis.getText() != "" && menge.getText() != "") {

            products.add(new Products(Integer.parseInt(id.getText()), name.getText(),
                                      Integer.parseInt(preis.getText()),Double.parseDouble(menge.getText()),
                                      Category.Notebook));
        }
       
       
        for (int i = 0; i < products.size(); i++) {

            System.out.println(products.get(i).getName());
        }
    }
In den meisten Beispielen, bei der ich gesehen habe und ich generell auch, übergebe ich der TableView immer ein ObservableList. Sobald du diese Liste ein Object (hier: Produkt) hinzufügt, weiß die TableView sofort dass etwas Neues dazuegkommen ist.
 
In den meisten Beispielen, bei der ich gesehen habe und ich generell auch, übergebe ich der TableView immer ein ObservableList. Sobald du diese Liste ein Object (hier: Produkt) hinzufügt, weiß die TableView sofort dass etwas Neues dazuegkommen ist.
warum übergeben wenn die liste das schon hat das ist wieder alles doppelt und dreifach
 

Zurück
Oben