在JavaFx中检测双击TextFieldTableCell可以通过以下步骤实现:
import javafx.scene.control.TableCell;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
public class DoubleClickTextFieldTableCell<S, T> extends TextFieldTableCell<S, T> {
public DoubleClickTextFieldTableCell() {
super();
}
@Override
public void startEdit() {
super.startEdit();
if (isEditable()) {
createTextField();
setText(null);
setGraphic(getTextField());
getTextField().selectAll();
}
}
@Override
public void commitEdit(T newValue) {
super.commitEdit(newValue);
updateItem(newValue, false);
}
private TextField getTextField() {
return (TextField) getGraphic();
}
private void createTextField() {
TextField textField = new TextField(getString());
textField.setOnKeyPressed((KeyEvent t) -> {
if (t.getCode() == KeyCode.ENTER) {
commitEdit((T) textField.getText());
} else if (t.getCode() == KeyCode.ESCAPE) {
cancelEdit();
}
});
textField.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue) {
commitEdit((T) textField.getText());
}
});
setGraphic(textField);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
TableView<Person> tableView = new TableView<>();
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
nameColumn.setCellFactory(column -> new DoubleClickTextFieldTableCell<>());
tableView.getColumns().add(nameColumn);
// 添加测试数据
tableView.getItems().add(new Person("John"));
tableView.getItems().add(new Person("Jane"));
primaryStage.setScene(new Scene(tableView, 200, 200));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
在上述代码中,我们创建了一个TableView,并添加了一个名为"Name"的列,该列使用自定义的TextFieldTableCell作为单元格工厂。通过双击单元格,可以进入编辑模式进行编辑。
这样,当用户双击TextFieldTableCell时,会自动进入编辑模式,用户可以修改单元格的值,并且按下Enter键或失去焦点时会提交修改,按下Esc键会取消修改。
推荐的腾讯云相关产品:腾讯云云服务器(ECS)和腾讯云容器服务(TKE)。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云