我的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列仍无效。答案 0 :(得分: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; }
:
:
}
答案 1 :(得分:0)
您在property
中设置的PropertyValueFactory
值必须与您的getter的名词部分匹配才能进行反射才能找到它。例如,您的示例显示
<cellValueFactory>
<PropertyValueFactory property="lidNaam" />
</cellValueFactory>
所以你的吸气剂应该是
getLidNaam()
但是,你有
getLid()
反射不会找到。更新您的getter以使用分配给每个属性的正确名词值。
@scottb提供的信息也是正确的。如果您希望能够在TableView
内编辑值,则需要使用*Property()
方法才能执行此操作。看一下Java TableView tutorial,特别是DataModel部分。