Tôi đã theo dõi Ví dụ 13-11 Giải pháp thay thế chỉnh sửa ô từ số offical tableview tutorial, nhưng tôi muốn số tableview
hoạt động như jtable
. Điều này có nghĩa là khi một ô được lấy nét, nó đã sẵn sàng để chỉnh sửa và sử dụng các phím mũi tên hoặc phím Enter sẽ ngay lập tức cam kết chỉnh sửa và di chuyển đến ô kế tiếp.Có ai đã tìm ra cách để thực hiện một hành động tableview javafx như một jtable?
Đây là những gì tôi đã đi quá xa:
Đầu tiên, tôi đã thêm
table.getSelectionModel().setCellSelectionEnabled(true);
Sau đó, tôi đã cố gắng để sửa đổi các lớp EditingCell
:
class EditingCell extends TableCell<Person, String> {
private TextField textField;
public EditingCell() {
}
@Override
public void updateSelected(boolean selected) {
super.updateSelected(selected);
if (selected) {
createTextField();
setText(null);
setGraphic(textField);
textField.requestFocus();
textField.selectAll();
} else {
String value = textField.getText();
if (value != null) {
commitEdit(value);
} else {
commitEdit(null);
}
}
}
@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) {
if ((t.getCode() == KeyCode.ENTER) || (t.getCode() == KeyCode.UP) || (t.getCode() == KeyCode.DOWN) || (t.getCode() == KeyCode.LEFT) || (t.getCode() == KeyCode.RIGHT)) {
t.consume();
String value = textField.getText();
if (value != null) {
commitEdit(value);
} else {
commitEdit(null);
}
} else if (t.getCode() == KeyCode.ESCAPE) {
cancelEdit();
}
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
Các tableview
tôi nhận được một mớ hỗn độn - Tôi phải bấm phím Enter hai lần để kết thúc chỉnh sửa, và nó sẽ không cam kết chỉnh sửa nhưng thay vào đó hủy bỏ nó.
Có ai có thể chỉ cho tôi đúng hướng không?
Tôi cảm thấy đau đớn của bạn ... Tôi đã không làm việc trên các bảng javafx trong một vài năm, nhưng đây là một mẩu bánh mì có thể là những gì bạn đang cố gắng làm: http://stackoverflow.com/questions/7880494/tableview-better-editing-through-binding/7884249 # 7884249 – jkaufmann