2016-05-11 8 views
0

Ich erstelle einen Nahrungsmittelrechner in Java (JavaFX), der Lebensmittelelemente wie Protein, Kohlenhydrate und Fett (alle TableView Tabellenspalten) neu berechnen kann, wenn Der Benutzer bestätigt eine Bearbeitung in der TableView.JavaFX - Ich verstehe nicht, wie ich meine TableView editierbar machen kann

Ich weiß nicht, wie ich meine Tabellenzellen editierbar machen kann. Ich verstehe die Dokumentation überhaupt nicht.

So erstelle ich meine Spalten. Ich habe gelesen, dass ich die setCellValueFactory zu ändern sollte, aber ich habe keine Ahnung, warum oder was als Parameter an diese Funktion übergeben werden sollte. Wo würde ich dann die Lebensmittelfelder dem Tisch zuordnen?

TableColumn<Food, Float> tableFoodFat = new TableColumn<>("Fat"); 
tableFoodFat.setCellValueFactory(new PropertyValueFactory<>("fat")); 
tableFoodFat.setMinWidth(100); 

Ich bin wirklich verwirrt. Könnte mir hier jemand mit einer Antwort in einfachen Worten helfen? Ich kann den Code selbst schreiben, ich muss nur verstehen, was und warum ich es ändern sollte.

EDIT: Dies funktioniert für Spalten String Daten enthalten - tableFoodTitle.setCellFactory(TextFieldTableCell.<Food>forTableColumn()); aber es wirft einen Fehler, wenn ich dieses Konzept versuchen mit Float-Daten auf Spalten zu verwenden.

Antwort

0

Versuchen Sie das !! es macht Sie Tabellenzellen editierbar!

tableFoodFat.setCellFactory(TextFieldTableCell.forTableColumn(new FloatStringConvert‌​er)); 
tableFoodFat.setOnEditCommit(new EventHandler<CellEditEvent<Food, Float>>() { 
      @Override 
      public void handle(CellEditEvent<Food, Float> t) { 
       ((Food) t.getTableView().getItems().get(t.getTablePosition().getRow())).setFOODFAT(t.getNewValue()); 
      } 
     }); 

zahlen nur atention hier setFOODFAT

Hoffe, es kann helfen!

+0

ich dies dann: 'inkompatible Typen: keine Instanz (en) des Typs Variable (n) S so existieren, dass Callback

, Tablecell > Entspricht Rückruf
, Tablecell > wobei S a Typ-Variable: S erweitert Objekt forTableColumn in Methode deklariert() ' –

+0

Ja, Sie haben Float nicht String wie ich gesendet ... versuchen, diese ... tableFoodFat.setCellFactory (TextFieldTableCell.forTableColumn (FloatStringConverter)); tableFoodFat.setOnEditCommit (new Eventhandler >() { @Override public void Griff (CellEditEvent t) { ((Food) t.getTableView(). GetItems(). Get (t.getTablePosition(). getRow())). setFOODFAT (t.getNewValue()); } }); – Rubens

+0

Danke, aber ich denke, ich habe es selbst herausgefunden, ich habe 'floatStringConverter()' nur an die 'forTableColumn' -Funktion übergeben und jetzt funktioniert es. Wenn es in jedem Teil meiner Software funktioniert, werde ich mit meiner Methode gehen und sie als Antwort hier posten. Wenn es irgendwo fehlschlägt, werde ich Ihre Lösung versuchen. –