2016-07-01 6 views
0

ich versuche Tableview in meiner javafx App zu verwenden, aber es ist mir leere Zeilen in Tableview geben ..... Hier ist Beispielausgabe:leere Zeile in Tableview JavaFx APP

sampleoutput

Hier ist die Code für Modellklasse:

public class Pizza { 
    private final SimpleStringProperty pname; 
    private final SimpleStringProperty pflavour; 
    private final SimpleStringProperty psize; 
    private final SimpleDoubleProperty pprice; 
    public Pizza(String name, String flavour, String size, Double price) { 
     super(); 
     this.pname = new SimpleStringProperty(name); 
     this.pflavour = new SimpleStringProperty(flavour); 
     this.psize = new SimpleStringProperty(size); 
     this.pprice = new SimpleDoubleProperty(price); 
    } 
    public String getName() { 
     return pname.get(); 
    } 
    public String getFlavour() { 
     return pflavour.get(); 
    } 
    public String getSize() { 
     return psize.get(); 
    } 
    public Double getPrice() { 
     return pprice.get(); 
    } 

} 

Hier ist der Code für die Controller-Klasse:

 @FXML 
     private TableView<Pizza> pizzatable; 
     @FXML 
     private TableColumn<Pizza,String> pname; 
     @FXML 
     private TableColumn<Pizza,String> pflavour; 
     @FXML 
     private TableColumn<Pizza,String> psize; 
     @FXML 
     private TableColumn<Pizza,Double> pprice; 
     ObservableList<Pizza> pizzalist; 

Hier ist der Code für die Methode, die ich Daten aus databse holen rufen:

public void fetchpizza() throws SQLException{ 
     stmt = conn.createStatement(); 
     sql = "select * from items where itype = 'Pizza'"; 
     rs = stmt.executeQuery(sql); 
     pname.setCellValueFactory(new PropertyValueFactory<Pizza,String>("pname")); 
     pflavour.setCellValueFactory(new PropertyValueFactory<Pizza,String>("pflavour")); 
     psize.setCellValueFactory(new PropertyValueFactory<Pizza,String>("psize")); 
     pprice.setCellValueFactory(new PropertyValueFactory<Pizza,Double>("pprice")); 
     pizzalist = FXCollections.observableArrayList(); 
     while(rs.next()){ 
      pizzalist.add(new Pizza(rs.getString("oname"),rs.getString("flavour"),rs.getString("size"),rs.getDouble("price"))); 
      pizzatable.setItems(pizzalist); 
     } 
     rs.close(); 
     stmt.close(); 
    } 
+0

Zuerst bist du sicher, dass dein itype = 'Pizza' gut geschrieben ist?, Zweitens funktioniert dieser pizzalist.add ("toto", "tata", "titi", "waou")? – Destrif

+0

Sie müssen die 'Elemente' der' TableView' nicht in jeder Iteration der Schleife festlegen. Dies einmal zu tun sollte ausreichen. – fabian

Antwort

0

Sie müssen die String s entsprechend den Getter oder Eigenschaft Getter als Argument für den Konstruktor PropertyValueFactory verwenden.

z. eine der folgenden Methoden der Elemente den Wert/Eigenschaft abzurufen würde verwendet werden, wenn Sie "name" als Parameter an den Konstruktor von PropertyValueFactory<Pizza, String> passieren:

  • nameProperty() (sollte StringProperty zurück). Dies ermöglicht es, Änderungen des Werts zu beobachten, ohne TableView.refresh() aufrufen zu müssen.
  • getName() (sollte String zurückkehren)

Sie passieren aber den Namen der Felder. Da die Methodennamen nicht das erforderliche Muster marschieren, bleiben die TableCell s leer.

+0

ja! es hat für mich funktioniert –