在FXML中定义一个可编辑的TableCell,可以通过以下步骤实现:
import javafx.scene.control.TableCell;
import javafx.scene.control.TextField;
public class StringEditableTableCell extends TableCell<YourDataType, String> {
private TextField textField;
public StringEditableTableCell() {
textField = new TextField();
textField.setOnKeyPressed(event -> {
if (event.getCode().equals(KeyCode.ENTER)) {
commitEdit(textField.getText());
} else if (event.getCode().equals(KeyCode.ESCAPE)) {
cancelEdit();
}
});
}
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
textField.setText(item);
setText(null);
setGraphic(textField);
} else {
setText(item);
setGraphic(null);
}
}
}
@Override
public void startEdit() {
super.startEdit();
setText(null);
setGraphic(textField);
textField.requestFocus();
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText(getItem());
setGraphic(null);
}
@Override
public void commitEdit(String newValue) {
super.commitEdit(newValue);
// 在这里可以处理编辑后的数据,例如更新到数据库等操作
}
}
<TableView fx:id="tableView">
<columns>
<TableColumn text="Name">
<cellValueFactory>
<PropertyValueFactory property="name" />
</cellValueFactory>
<cellFactory>
<fx:factory>
<StringEditableTableCell />
</fx:factory>
</cellFactory>
</TableColumn>
</columns>
</TableView>
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import java.net.URL;
import java.util.ResourceBundle;
public class YourController implements Initializable {
@FXML
private TableView<YourDataType> tableView;
@FXML
private TableColumn<YourDataType, String> nameColumn;
@Override
public void initialize(URL location, ResourceBundle resources) {
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
// 设置数据源
tableView.setItems(yourDataList);
}
}
这样,就可以在FXML中定义一个可编辑的TableCell,并实现相应的编辑功能。
领取专属 10元无门槛券
手把手带您无忧上云