0
我有2个窗口应用程序通过SceneBuilder构建,第一个包含几个按钮和表列出一堆用户,第二个应打印出有关选定用户的详细信息。JavaFX TableView-TextField绑定
他们应该进行通信,以便点击第一个窗口中的行应该在第二个窗口中更改值,并且在第二个窗口中调整值应该修改第一个窗口中的可见字段(但现在我只是想让第一个窗口部分工作)。
我有tableView工作和检测选择事件时点击tableView行,并在第二个窗口中的字段初始化为初始用户值(我通过CustomerEmiter持有自己的客户字段跟踪这些)。但即使CustomerEmiter字段被修改,它们之后也不会改变。
窗口1个控制器snipet:
@Override
public void initialize(URL location, ResourceBundle resources) {
id.setCellValueFactory(new PropertyValueFactory<>("id"));
userName.setCellValueFactory(new PropertyValueFactory<>("userName"));
// grab users from the DB
getUsers();
customerTableView.setItems(customersObservableList);
customerTableView.getSelectionModel().selectedItemProperty()
.addListener((ObservableValue<? extends Customer> observable, Customer oldValue, Customer newValue) -> {
if (observable != null && observable.getValue() != null) {
CustomerEmiter.getCustomerEmiter()
.getCustomer().setUserName(newValue.userNameProperty());
}
});
}
private ObservableList<Customer> customersObservableList = FXCollections.observableArrayList();
public void getUsers() {
List<CustomerObject> customerList = DataTransferObject.getCustomers();
customerList.stream().forEach((customerO) -> {
customersObservableList.add(new Customer(customerO));
});
}
窗口2控制器snipet:
@FXML
private TextField userNameTextField;
@Override
public void initialize(URL location, ResourceBundle resources) {
Bindings.bindBidirectional(userNameTextField.textProperty(),
CustomerEmiter.getCustomerEmiter().getCustomer()
.userNameProperty());
}
CustomerEmiter类:
public class CustomerEmiter {
private static CustomerEmiter instance = null;
private static Customer customer = new Customer(new CustomerObject());
protected CustomerEmiter() {
}
public void setCustomer(Customer customer) {
CustomerEmiter.customer = customer;
}
public Customer getCustomer() {
return customer;
}
public static CustomerEmiter getCustomerEmiter() {
if(instance == null) {
instance = new CustomerEmiter();
}
return instance;
}
}
客户类别:
public class Customer {
private IntegerProperty id;
private StringProperty userName;
public Customer(CustomerObject customer) {
this.id = new SimpleIntegerProperty(customer.id);
this.userName = new SimpleStringProperty(customer.userName);
public int getId() {
return this.id.get();
}
public String getUserName() {
if(this.userName.isNull().get()) {
return "empty";
}
return userName.get();
}
public StringProperty userNameProperty() {
if(this.userName.isNull().get()) {
return new StringProperty("empty");
}
return userName;
}
你能提供客户分类的片段吗?你的代码对我来说似乎很好。我希望看到getUsers()以及'customersObservableList'是如何初始化的 –
向window1控制器和Customer类添加了相关信息,我在newUser/deleteUser按钮上重新填充了ObservableList,因此我将它们排除了。我已经删除了数据库连接直到我知道了,所以DataTransferObject.getCustomers()现在只创建5个虚拟客户。 – user3533671
好的,你是否尝试过调试?你可以粘贴stackTrace吗? –