【发布时间】:2016-09-09 01:58:41
【问题描述】:
我刚刚开始学习属性绑定。我已经设置了控件并在此处绑定了属性(代码缩写):
@FXML
private TextField txtOldPremium;
@FXML
private TextField txtNewPremium;
@FXML
private TextField txtProratedChange;
private SimpleBooleanProperty quoteOnly = new SimpleBooleanProperty();
private SimpleBooleanProperty reviewedBilling = new SimpleBooleanProperty();
private SimpleStringProperty oldPremium = new SimpleStringProperty();
private SimpleStringProperty newPremium = new SimpleStringProperty();
private SimpleStringProperty proratedChange = new SimpleStringProperty();
private SimpleStringProperty additionalInformation = new SimpleStringProperty();
@FXML
public void initialize() {
// Bind the vehicle data to the tableview
colEffectiveDate.setCellValueFactory(new PropertyValueFactory<Vehicle, String>("effectiveDateString"));
colDescription.setCellValueFactory(new PropertyValueFactory<Vehicle, String>("description"));
colVIN.setCellValueFactory(new PropertyValueFactory<Vehicle, String>("vin"));
colAction.setCellValueFactory(new PropertyValueFactory<Vehicle, String>("action"));
// Setup data binding to controls
chkQuoteOnly.selectedProperty().bindBidirectional(quoteOnly);
chkReviewedBilling.selectedProperty().bindBidirectional(reviewedBilling);
txtOldPremium.textProperty().bindBidirectional(oldPremium);
txtNewPremium.textProperty().bindBidirectional(newPremium);
}
@Override
public String getComments() {
StringBuilder comments = new StringBuilder();
if (!txtOldPremium.getText().isEmpty() && !txtNewPremium.getText().isEmpty()) {
} else {
}
}
if (!txtProratedChange.getText().isEmpty()) {
}
我在if (!txtOldPremium.getText().isEmpty() && !txtNewPremium.getText().isEmpty()) { 收到 NullPointerException。我假设我在实现绑定方面做错了什么。 TextFields 本身目前是空的。
基本上,我只希望TextField 和oldPremium 字符串始终保持同步。但是我仍然需要能够对文本TextField 进行处理。我确实有几种其他类型的控件(CheckBox、ComboBox 等)希望与基础数据同步。
【问题讨论】:
-
什么是 null?
-
事实证明,如果没有在其中输入文本,
txtOldPremium.getText()为 null。不过,我很好奇既然我已经绑定了属性,为什么会显示为 null。在绑定之前,txtOldPremium.getText().isEmpty()只会返回 true。 (txtOldPremium是对TextField的引用) -
好吧,大概
oldPremium,不管是什么,在你绑定时都包含null。 -
我将它们绑定在我的 FXML 控制器的
initialize()方法中。这样做不合适吗? -
这与它有什么关系?显然,
oldPremium.getValue()在您执行bindBidirectional(...)时返回null,因此当您执行绑定时,它会将文本字段的文本设置为null。您没有显示任何代码来显示您初始化oldPremium的方式、时间或地点,甚至它是什么。
标签: java javafx data-binding