【发布时间】:2014-05-20 09:10:13
【问题描述】:
在我的 GUI 中,我有一个 TABLEVIEW 和一个 HTMLEditor。
TableView 有两列。没有编辑功能的第一列。第二列有编辑选项。
对于 HTMLEditor,我已经编写了 setOnKeyPressed 属性。在该属性中,在处理方法中,我试图更新第二列数据。但是数据根本没有反映在 TableView Control 中。但是当我尝试打印第二列的数据时,它只显示 HTMLEditor 的数据。但是 HTMLEditor 的数据没有反映在 TableView 2nd Column 中。
以下是我的代码
public class BinderDocumnetController implements Initializable {
public BinderDocumnetController() {
this.details = FXCollections.observableArrayList();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
tblName.setCellValueFactory(new PropertyValueFactory<CData, String>("strName"));
tblRemarks.setCellValueFactory(new PropertyValueFactory<CData, String>("strRemarks"));
tblData.setItems(details);
tblData.setEditable(true);
Callback<TableColumn<CData, String>, TableCell<CData, String>> para4cellFactory
= new Callback<TableColumn<CData, String>, TableCell<CData, String>>() {
public TableCell call(TableColumn p) {
return new EditingCell();
}
};
tblRemarks.setCellFactory(para4cellFactory);
htmlEditor.setOnKeyReleased(new EventHandler<KeyEvent>()
{
@Override
public void handle(KeyEvent t) {
textField.setText(htmlEditor.getHtmlText());
System.out.println("row no. is "+tblData.getSelectionModel().getSelectedIndex());
tblData.getItems().get(tblData.getSelectionModel().getSelectedIndex()).setStrRemarks(htmlEditor.getHtmlText());
System.out.println(" data at row no. "+tblData.getSelectionModel().getSelectedIndex()+"is");
System.out.println(" "+tblData.getItems().get(tblData.getSelectionModel().getSelectedIndex()).getStrRemarks());
}
}
);
textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
htmlEditor.setHtmlText(textField.getText());
}
});
}
public void onbtnAddClicked(){
System.out.println(" in add");
CData cdata= new CData("XYZ","done");
details.add(cdata);
}
@FXML
HTMLEditor htmlEditor;
@FXML
TextField textField;
ObservableList<CData> details;
@FXML
TableView<CData> tblData;
@FXML
TableColumn<CData,String> tblRemarks,tblName;
@FXML
Button btnAdd;
class EditingCell extends TableCell<Object, String> {
private TextField textField;
public EditingCell() {
}
@Override
public void startEdit() {
if (!isEmpty()) {
super.startEdit();
createTextField();
setText(null);
setGraphic(textField);
textField.selectAll();
}
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText((String) getItem());
setGraphic(null);
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(getString());
}
setText(null);
setGraphic(textField);
} else {
setText(getString());
setGraphic(null);
}
}
}
private void createTextField() {
textField = new TextField(getString());
textField.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0,
Boolean arg1, Boolean arg2) {
if (!arg2) {
commitEdit(textField.getText());
}
}
});
textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
htmlEditor.setHtmlText(textField.getText());
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
}
以下是 CData.java 代码
public class CData {
SimpleStringProperty strName = new SimpleStringProperty("");
SimpleStringProperty strRemarks = new SimpleStringProperty("");
public CData(String strName,String strRemarks) {
setStrName(strName);
setStrRemarks(strRemarks);
}
public String getStrName() {
return strName.get();
}
public void setStrName(String strName) {
this.strName.set(strName);
}
public String getStrRemarks() {
return strRemarks.get();
}
public void setStrRemarks(String strRemarks) {
this.strRemarks.set(strRemarks);
}
public SimpleStringProperty strName() {
return strName;
}
public SimpleStringProperty strRemarks() {
System.out.println("\nRemarks: "+strRemarks.get()+"\n\n");
return strRemarks;
}
}
【问题讨论】:
-
请更新密切相关的问题,而不是问一个具有相同标题的新问题。参考 - stackoverflow.com/questions/23752993/…
-
你的属性访问器方法
strName()和strRemarks()的名字是错误的;PropertyValueFactory将找不到它们。将它们修复为strNameProperty()和strRemarksProperty(),看看是否能解决问题。
标签: java binding javafx tableview html-editor