2015-04-07 4 views
0

My TableView не отображает данные, которые он получает из базы данных. Он отображает первый столбец, но не другой. Во время отладки я вижу, что полученный ArrayList заполняется данными, а данные, которые я пытаюсь отобразить, - это String, int и Timestamp.Java FXML - TableView не отображает данные

Я использовал этот код во всей своей программе, но по какой-то причине он не будет работать на этом конкретном экране.

Вот FXML:

<AnchorPane id="AnchorPane" prefHeight="331.0" prefWidth="340.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="desomer_michael_vivesbike.Controllers.RittenOverzichtController"> 
    <children> 
     <Label layoutX="14.0" layoutY="14.0" text="Ritten"> 
     <font> 
      <Font size="20.0" /> 
     </font> 
     </Label> 
     <TableView fx:id="lijst_ritten" layoutX="14.0" layoutY="44.0" prefHeight="200.0" prefWidth="312.0"> 
     <columns> 
      <TableColumn prefWidth="75.0" text="Ritnr"> 
       <cellValueFactory> 
        <PropertyValueFactory property="id" /> 
       </cellValueFactory> 
      </TableColumn> 
      <TableColumn prefWidth="75.0" text="Lid"> 
       <cellValueFactory> 
        <PropertyValueFactory property="lidNaam" /> 
       </cellValueFactory> 
      </TableColumn> 
      <TableColumn prefWidth="75.0" text="Fiets"> 
       <cellValueFactory> 
        <PropertyValueFactory property="fietsNr" /> 
       </cellValueFactory> 
      </TableColumn> 
      <TableColumn prefWidth="85.0" text="Begindatum"> 
       <cellValueFactory> 
        <PropertyValueFactory property="startTijd" /> 
       </cellValueFactory> 
      </TableColumn> 
     </columns> 
     </TableView> 
     <Button layoutX="15.0" layoutY="253.0" mnemonicParsing="false" onAction="#toRitToevoegScherm" text="Toevoegen" /> 
     <Button layoutX="99.0" layoutY="253.0" mnemonicParsing="false" text="Wijzigen" /> 
     <Button layoutX="170.0" layoutY="253.0" mnemonicParsing="false" text="Verwijderen" /> 
     <Button layoutX="257.0" layoutY="253.0" mnemonicParsing="false" text="Afsluiten" /> 
     <Label layoutX="15.0" layoutY="289.0" textFill="RED"> 
     <font> 
      <Font size="15.0" /> 
     </font> 
     </Label> 
     <Button layoutX="274.0" layoutY="287.0" mnemonicParsing="false" onAction="#toHoofdscherm" text="Terug" /> 
    </children> 
</AnchorPane> 

А вот код, который заполняет TableView от контроллера:

public void getAlleRitten(){ 
     try{ 
      RitTrans ritTrans = new RitTrans(); 
      ArrayList<Rit> lijst = ritTrans.getAlleRitten(); 
      lijst_ritten.setItems(FXCollections.observableArrayList(ritTrans.getAlleRitten())); 
     } catch(Exception e){ 
      System.out.println("Fout in RittenOverzichtController.getAlleRitten(): " + e.getMessage()); 
     } 
    } 

объектов в ArrayList, который получил от getAlleRitten() являются объектами класс Рит, вот его поля:

public class Rit { 
private int id; 
private Timestamp startTijd; 
private Timestamp eindTijd; 
private Fiets fiets; 
private Lid lid; 
private String lidNaam; 
private int fietsNr; 
private int prijs; 
private ArrayList<String> opmerkingen; 

public Rit(int id, Timestamp startTijd, Timestamp eindTijd) { 
    this.id = id; 
    this.startTijd = startTijd; 
    this.eindTijd = eindTijd; 
} 

public Rit(){ 

} 

public int getPrijs() { 
    return prijs; 
} 

public void setPrijs(int prijs) { 
    this.prijs = prijs; 
} 

public ArrayList<String> getOpmerkingen() { 
    return opmerkingen; 
} 

public void setOpmerkingen(ArrayList<String> opmerkingen) { 
    this.opmerkingen = opmerkingen; 
} 

public Lid getLid() { 
    return lid; 
} 

public void setLid(Lid lid) { 
    this.lid = lid; 
    lidNaam = lid.getNaam() + " " + lid.getVoornaam(); 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public Timestamp getStartTijd() { 
    return startTijd; 
} 

public void setStartTijd(Timestamp startTijd) { 
    this.startTijd = startTijd; 
} 

public Timestamp getEindTijd() { 
    return eindTijd; 
} 

public void setEindTijd(Timestamp eindTijd) { 
    this.eindTijd = eindTijd; 
} 

public Fiets getFiets() { 
    return fiets; 
} 

public void setFiets(Fiets fiets) { 
    this.fiets = fiets; 
    fietsNr = fiets.getRegisNr(); 
} 

} Пример экрана:

enter image description here

Как вы можете видеть, он заполняет в первом столбце просто отлично, но все еще нет. Любая помощь будет принята с благодарностью.

EDIT: я получил столбец «beginDatum», одна из букв была заглавная и я этого не видел, но средние 2 столбца все еще не работают.

+0

Получатели и сеттеры имеют значение. Как выглядят ваши? Соответствует ли ваша модель данных спецификации спецификации Java FX bean? Он должен иметь свойство getter. Кроме того, ваши поля также должны быть свойствами Java FX (которые являются наблюдаемыми), а не просто примитивными или не-FX-типами. – scottb

+0

Я добавил геттеры и сеттеры. И извините, но я не знаю, что вы подразумеваете под «моделью данных, соответствующей спецификации для java FX bean», я только новичок – Micha12354

ответ

0

Ваша модель данных не соответствует специфике, необходимой для Java FX. Вот пример модели данных, которая прекрасно работает в FX Tableview:

public class Client extends DB { 

    private final long  m_appUID; 

    private IntegerProperty id =   new SimpleIntegerProperty(); 
    private LongProperty defmrnKey = new SimpleLongProperty(); 
    private StringProperty lastName = new SimpleStringProperty(); 
    private StringProperty midName = new SimpleStringProperty(); 
    private StringProperty firstName = new SimpleStringProperty(); 
    private IntegerProperty doB =  new SimpleIntegerProperty(); 
    private StringProperty gender =  new SimpleStringProperty(); 



    public final int getID() {return this.id.get(); } 
    void setID(int id) { this.id.set(id); } 
    public final IntegerProperty idProperty() { return this.id; } 

    public final long getDefMRNKey() { return this.defmrnKey.get(); } 
    public final void setDefMRNKey(long id) { this.defmrnKey.set(id); } 
    public final LongProperty defMRNKeyProperty() { return this.defmrnKey; } 

    : 
    : 
} 
+0

Это, похоже, не работает, но я благодарен за ответ.Но я уже несколько раз использовал tableviews в своей программе, и я всегда заполнял их, как я показал в своем оригинальном посте, это единственное, что мне неприятно. – Micha12354

0

property значение, которое вы установили в PropertyValueFactory должно соответствовать существительное часть вашего геттер для того, чтобы отражение, чтобы найти его. Например, ваш пример показывает

<cellValueFactory> 
    <PropertyValueFactory property="lidNaam" /> 
</cellValueFactory> 

так что ваш поглотитель должен быть

getLidNaam() 

Однако, у вас есть

getLid() 

, которые не будут найдены путем отражения. Обновите получателей, чтобы использовать правильное значение существительного, присвоенное каждому свойству.

Информация, предоставленная @scottb, также верна. Если вы когда-либо захотите редактировать значения внутри своего TableView, для этого вам нужно будет использовать методы *Property(). Взгляните на Java TableView tutorial, в частности раздел DataModel.

Смежные вопросы