皆さん、今晩は、
今日、かなり奇妙な問題に出くわしました。何が間違っているのかわかりません。これは、PropertyValueFactory を使用してテーブルの列をバインドすることに関するものです。FXML でテーブル ビューとテーブル列を作成し、Scene Builder で適切な fx:id を設定しました。
問題は、一部の列に期待されるデータが表示され、他の列が空になっていることです。ユーザーがボタンを押したときに、次のコードを使用してテーブル ビューにアイテムを追加します。
ObservableList<User> olUsers = DA_User.getUsers();
tbl_MC_Manage_Users.getItems().addAll(olUsers);
olUsers のユーザー オブジェクトに必要なすべてのデータが含まれていることは確かです (for ループと System.out.println でテストしました)。
次のような結果が得られます: (<text> は列ヘッダーを表します)
<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)
大量のコードで申し訳ありませんが、なぜ少数の列だけがデータを取得しているのか本当にわかりません..誰かが私を正しい方向に向けてくれることを願っています:)
前もって感謝します!