簡體   English   中英

Java FXML-TableView不顯示數據

[英]Java FXML - TableView not displaying data

我的TableView沒有顯示從數據庫獲取的數據。 它顯示第一列,但不顯示其他列。 調試時,我可以看到它接收到的ArrayList充滿了數據,而我要顯示的數據是String,int和Timestamp。

我在程序中都使用了這種代碼,但是由於某種原因,它無法在特定的屏幕上運行。

這是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());
        }
    }

從getAlleRitten()接收到的ArrayList中的對象是Rit類的對象,這是其字段:

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();
}

截圖示例:

在此處輸入圖片說明

如您所見,它很好地填充了第一列,但其他所有內容都沒有。 任何幫助將不勝感激。

編輯:我使“ beginDatum”列工作,字母之一被大寫,我沒有看到,但是中間2列仍然不起作用。

您的數據模型似乎不符合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; }

    :
    :
}

您在PropertyValueFactory設置的property值必須與getter的名詞部分匹配,以便反射找到它。 例如,您的示例顯示

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

所以你的吸氣劑應該是

getLidNaam()

但是,你有

getLid()

反射不會發現。 更新您的吸氣劑,以使用分配給每個屬性的正確名詞值。

@scottb提供的信息也是正確的。 如果您希望能夠在TableView編輯值,則需要使用*Property()方法。 看一下Java TableView教程 ,特別是DataModel部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM