javaFX table表格可编辑失去焦点提交
2017-09-29 16:03
821 查看
代码如下
public class EditingCell<T> extends TableCell<T, 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((ob, old, now) -> {
if (!now) {
commitEdit(textField.getText());
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
最后给你要设置的列
要设置的列.setCellFactory((TableColumn<T,String> p) -> new EditingCell<T>()) ;
就可以了
public class EditingCell<T> extends TableCell<T, 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((ob, old, now) -> {
if (!now) {
commitEdit(textField.getText());
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
最后给你要设置的列
要设置的列.setCellFactory((TableColumn<T,String> p) -> new EditingCell<T>()) ;
就可以了
相关文章推荐
- 双击 表格 td 变成 可以编辑的input框 失去焦点提交
- 点击后编辑文本,文本框失去焦点后提交内容,重新变为文本
- table单击进入编辑状态、失去焦点发送数据到后台
- jquery——双击编辑异步更新(双击内容变input框可编辑,失去焦点后修改的数据异步提交)
- javaFxTableView可编辑表格,当我添加一个TextFieldTableCell至TableColumn的CellFactory中后,在编辑数据时后台报错
- 在TableViewer中如何给表格的单元格增加其他组件的编辑功能
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- (翻译)第十九回 JavaFX2.0 表格框TableView
- 用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
- 编辑表格@tableView实现分区,索引
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- 自定义jqGrid编辑功能,当行获取焦点时编辑,失去焦点时保存
- ExtJs表格控件(三)----单元格编辑与提交修改
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- SWT的Table表格可编辑单元格
- Ext 可编辑表格批量提交
- JavaFX表格控件TableView高级应用:自动添加ID列、删除操作列、单元格内容个性化渲染
- js中常用的事件,onclick 单击事件、onblur 失去焦点事件、onchange改变事件、onmouseover鼠标进入事件、onmouseout鼠标移除事件、onsubmit提交事件
- table中td元素,不可操作、不可编辑、获取不到焦点、不能被选中
- 对象失去焦点时自己动提交数据的实现代码