Java FXML-TableView不显示数据

Java FXML-TableView不显示数据,java,fxml,Java,Fxml,我的TableView没有显示它从数据库获取的数据。它显示第一列,但不显示其他列。在调试时,我可以看到它接收的ArrayList中填充了数据,我试图显示的数据是一个字符串、一个int和一个时间戳 我已经在我的程序中使用了这种代码,但是由于某些原因,它在这个特定的屏幕上不起作用 以下是FXML: <AnchorPane id="AnchorPane" prefHeight="331.0" prefWidth="340.0" xmlns="http://javafx.com/javaf

我的TableView没有显示它从数据库获取的数据。它显示第一列,但不显示其他列。在调试时,我可以看到它接收的ArrayList中填充了数据,我试图显示的数据是一个字符串、一个int和一个时间戳

我已经在我的程序中使用了这种代码,但是由于某些原因,它在这个特定的屏幕上不起作用

以下是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());
        }
    }
public void getalleritect(){
试一试{
RitTrans RitTrans=新的RitTrans();
ArrayList lijst=ritTrans.getalleritect();
lijst_rited.setItems(FXCollections.observableArrayList(ritTrans.getAlleritect());
}捕获(例外e){
System.out.println(“Fout-in-RittenOverzichtController.getAlleritect():”+e.getMessage());
}
}
从GetAlleWrite()接收的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();
}
公共类{
私有int-id;
私有时间戳startTijd;
私有时间戳eindTijd;
私人采邑;
私用盖;
私有字符串lidNaam;
私人国际采邑;
私家侦探;
私人ArrayList opmerkingen;
公共Rit(int id、时间戳startTijd、时间戳eindTijd){
this.id=id;
this.startTijd=startTijd;
this.eindTijd=eindTijd;
}
公营机构({
}
公共int getPrijs(){
返回prijs;
}
公共void setPrijs(int prijs){
this.prijs=prijs;
}
公共阵列列表getOpmerkingen(){
返回opmerkingen;
}
公共无效setOpmerkingen(ArrayList opmerkingen){
this.opmerkingen=opmerkingen;
}
公共Lid getLid(){
返回盖;
}
公共空间箱盖(箱盖){
this.lid=lid;
lidNaam=lid.getNaam()+“”+lid.getVoornaam();
}
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共时间戳getStartTijd(){
返回startTijd;
}
public void setStartTijd(时间戳startTijd){
this.startTijd=startTijd;
}
公共时间戳getEindTijd(){
返回eindTijd;
}
公共无效集合eindTijd(时间戳eindTijd){
this.eindTijd=eindTijd;
}
公地{
返回封地;
}
公共无效集合(集合){
这个.fiets=fiets;
fietsNr=fiets.getRegisNr();
}
} 示例屏幕截图:

如您所见,它很好地填充了第一列,但其他所有内容都没有。 任何帮助都将不胜感激


编辑:我让“beginDatum”列正常工作,其中一个字母大写了,我没有看到,但中间的两列仍然不正常。

您的数据模型似乎不符合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>
然而,你有

getLid()
它不会被反射找到。更新getter以使用分配给每个属性的正确名词值


@scottb提供的信息也是正确的。如果希望能够编辑
表视图中的值,则需要使用
*Property()
方法。看看Java,特别是DataModel部分

能手和二传手很重要。你的长什么样?您的数据模型是否符合JavaFXbean规范?它需要有一个属性getter。此外,您的字段还需要是JavaFX属性(可以观察到),而不是简单的原语或非FX类型。很抱歉,我不知道你说的“数据模型符合JavaFXBean规范”是什么意思,我只是一个初学者,但这似乎不起作用,我很感激你的回答。但我在我的程序中已经使用了几次TableView,我总是像我在原始帖子中所展示的那样填充它们,这是唯一一个给我带来麻烦的。
getLid()