JavaFX TableView绑定数据后仅显示空白行的问题及解决方法
JavaFX TableView绑定数据后显示空白行问题修复
使用JavaFX的TableView组件绑定数据后,TableView仅展示空白行,无法正常显示列内容,相关代码如下:
Controller.java
public class Controller { @FXML private TableView<PersonalInfo> personalInfo = new TableView<>(); @FXML private TableColumn<PersonalInfo,String> tvId; @FXML public void initialize() { tvId.setCellValueFactory(new PropertyValueFactory<>("Id")); } public void btnShow(ActionEvent actionEvent) { List<PersonalInfo> participantList = new ArrayList<>(); participantList.add(new PersonalInfo("10") ); personalInfo.getItems().clear(); personalInfo.getItems().addAll(participantList); }}
PersonalInfo类
public class PersonalInfo { private String pId; public PersonalInfo(String pId) { this.pId = pId; } public PersonalInfo() { } public PersonalInfo setpId(String pId) { this.pId = pId; return this; } public String getpId() { return pId; }}
sample.fxml
<children> <TableView fx:id="personalInfo"> <columns> <TableColumn fx:id="tvId" prefWidth="75.0" text="Id" /> </columns> </TableView> <Button mnemonicParsing="false" onAction="#btnShow" text="Show" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER" /> </children>
问题原因
上述代码运行后点击Show按钮,TableView仅出现空白行,无法展示Id列的内容,核心问题为PropertyValueFactory的参数与实体类getter/setter命名不匹配:PropertyValueFactory传入的参数为"Id",但PersonalInfo类对应的getter、setter方法为getpId和setpId,二者命名规则不一致导致框架无法正确读取属性值。
修复方案
- 方案1:将
PropertyValueFactory的参数改为"pId",同时将PersonalInfo类的getter、setter改为符合Java命名规范的getPId和setPId; - 方案2:直接将PersonalInfo类pId属性对应的getter、setter修改为
getId和setId。
修改完成后即可正常展示数据。
内容的提问来源于stack exchange,提问作者VahidKhanzadeh
相关产品推荐
相关产品推荐

