【问题标题】:JavaFX2.2 not all table columns showing data with PropertyValueFactory?JavaFX2.2不是所有的表列都用PropertyValueFactory显示数据?
【发布时间】:2012-08-12 04:05:59
【问题描述】:

大家晚安,

我今天偶然发现了一个相当奇怪的问题,我不知道我做错了什么。这是关于使用 PropertyValueFactory 绑定表列。我在 FXML 中创建了表格视图和表格列,并使用 Scene Builder 设置了适当的 fx:id。

现在的问题是某些列显示的是预期数据,而其他列只是空的。当用户按下按钮时,我使用以下代码将项目添加到表格视图中:

ObservableList<User> olUsers = DA_User.getUsers();
tbl_MC_Manage_Users.getItems().addAll(olUsers);

我确信 olUsers 中的用户对象包含所有需要的数据(使用 for 循环和 System.out.println 对其进行了测试)

我得到这样的结果:(代表列标题)

<disabled>   <username>    <title>    <lastname>    <firstname>   <address>   <zip>    <city>
false        (empty)       Mr.        (empty)       (empty)       address1    (empty)  city1
false        (empty)       Miss       (empty)       (empty)       address2    (empty)  city2

所以由于某种原因,列用户名、姓氏、名字、zip 没有显示任何数据...

控制器的一些部分:

//declaration (these are the fx:id's connected to my table colums)
@FXML private TableView<User> tbl_MC_Manage_Users;
@FXML private TableColumn<User,Boolean> tc_MC_Manage_Disabled;
@FXML private TableColumn<User,String> tc_MC_Manage_Username;
@FXML private TableColumn<User,String> tc_MC_Manage_Title;
@FXML private TableColumn<User,String> tc_MC_Manage_Lastname;
@FXML private TableColumn<User,String> tc_MC_Manage_Firstname;
@FXML private TableColumn<User,String> tc_MC_Manage_Address;
@FXML private TableColumn<User,String> tc_MC_Manage_ZipCode;
@FXML private TableColumn<User,String> tc_MC_Manage_City;

@Override
public void initialize(URL url, ResourceBundle rb) {
...
//setting the binding on the table columns at initialize();
    tc_MC_Manage_Disabled.setCellValueFactory(new PropertyValueFactory<User, Boolean>("disabled"));
    tc_MC_Manage_Username.setCellValueFactory(new PropertyValueFactory<User, String>("username"));
    tc_MC_Manage_Title.setCellValueFactory(new PropertyValueFactory<User, String>("title")); 
    tc_MC_Manage_Firstname.setCellValueFactory(new PropertyValueFactory<User, String>("firstname"));
    tc_MC_Manage_Lastname.setCellValueFactory(new PropertyValueFactory<User, String>("lastname"));  
    tc_MC_Manage_Address.setCellValueFactory(new PropertyValueFactory<User, String>("address"));
    tc_MC_Manage_ZipCode.setCellValueFactory(new PropertyValueFactory<User, String>("zipcode")); 
    tc_MC_Manage_City.setCellValueFactory(new PropertyValueFactory<User, String>("city"));
...
}      

这里是 User 类的一些部分

private SimpleBooleanProperty disabled = new SimpleBooleanProperty();
private SimpleStringProperty username = new SimpleStringProperty("");
private SimpleStringProperty title = new SimpleStringProperty("");
private SimpleStringProperty lastname = new SimpleStringProperty("");
private SimpleStringProperty firstname = new SimpleStringProperty("");
//... (same for the others)

//getters
public boolean isDisabled() { return disabled.get(); }
public String getTitle() { return title.get(); }
public String getUsername() { return username.get(); }
public String getLastName() { return lastname.get(); }
public String getFirstName() { return firstname.get(); }
//... (same for the others)

//setters
public void setDisabled(boolean value) { disabled.set(value); }
public void setUsername(String value) { username.set(value); }
public void setTitle(String value) { title.set(value); }
public void setLastName(String value) { lastname.set(value); }
public void setFirstName(String value) { firstname.set(value); }  
//... (same for the others)

对不起,代码负载,但我真的不明白为什么只有几列正在获取他们的数据。我希望有人能指出我正确的方向:)

提前致谢!

【问题讨论】:

    标签: java javafx-2 tablecolumn


    【解决方案1】:

    如果您的 setter 名为 getFirstName,则属性为 firstName,大写“N”。尝试下一个:

    tc_MC_Manage_Disabled.setCellValueFactory(new PropertyValueFactory<User, Boolean>("disabled"));
    tc_MC_Manage_Username.setCellValueFactory(new PropertyValueFactory<User, String>("userName"));
    tc_MC_Manage_Title.setCellValueFactory(new PropertyValueFactory<User, String>("title")); 
    tc_MC_Manage_Firstname.setCellValueFactory(new PropertyValueFactory<User, String>("firstName"));
    tc_MC_Manage_Lastname.setCellValueFactory(new PropertyValueFactory<User, String>("lastName"));  
    tc_MC_Manage_Address.setCellValueFactory(new PropertyValueFactory<User, String>("address"));
    tc_MC_Manage_ZipCode.setCellValueFactory(new PropertyValueFactory<User, String>("zipCode")); 
    tc_MC_Manage_City.setCellValueFactory(new PropertyValueFactory<User, String>("city"));
    

    另外我建议你将property 方法添加到User 类:

    public StringProperty titleProperty() { return title; }; // etc
    

    它将允许您的表格反映数据更改。见Binding JavaFX 2 TableView elements第二部分

    【讨论】:

    • 哈,我怎么会错过...感谢谢尔盖的迅速而明确的回答!
    • 我遇到了 setCellValueFactory(new PropertyValueFactory("first")) 的问题,其中 first 是一个属性。你的建议对我帮助很大!我创建了 public SimpleBooleanProperty firstProperty() 并且一切正常。谢谢谢尔盖!!
    猜你喜欢
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2015-10-08
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多