用javafx实现 同一个TableColum包含文本编辑和下拉框
时间: 2023-07-15 10:15:32 浏览: 149
你可以通过在TableCell中创建一个HBox,将文本编辑和下拉框放在一起,然后将HBox设置为TableCell的图形。
以下是一个简单的示例代码,它创建了一个包含文本编辑和下拉框的表格列:
```
TableColumn<Person, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
nameCol.setCellFactory(column -> {
return new TableCell<Person, String>() {
private final TextField textField = new TextField();
private final ComboBox<String> comboBox = new ComboBox<>();
{
// 添加下拉框选项
comboBox.getItems().addAll("Option 1", "Option 2", "Option 3");
// 监听文本编辑
textField.textProperty().addListener((observable, oldValue, newValue) -> {
if (isEditing()) {
commitEdit(newValue);
}
});
// 监听下拉框选择
comboBox.setOnAction(event -> {
if (isEditing()) {
commitEdit(comboBox.getValue());
}
});
}
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
HBox hbox = new HBox(textField, comboBox);
hbox.setSpacing(5);
setGraphic(hbox);
setText(null);
}
}
@Override
public void startEdit() {
super.startEdit();
// 显示文本编辑或下拉框
if (getItem() == null) {
textField.setText("");
setGraphic(textField);
} else {
comboBox.setValue(getItem());
setGraphic(comboBox);
}
}
@Override
public void cancelEdit() {
super.cancelEdit();
// 恢复显示文本或下拉框
setText(getItem());
setGraphic(null);
}
@Override
public void commitEdit(String newValue) {
super.commitEdit(newValue);
// 更新表格数据
getTableView().getItems().get(getIndex()).setName(newValue);
setText(newValue);
setGraphic(null);
}
};
});
TableView<Person> tableView = new TableView<>();
tableView.getColumns().add(nameCol);
```
在这个示例中,我们使用了一个HBox来组合文本编辑和下拉框,并将其设置为TableCell的图形。我们还为文本编辑和下拉框添加了相应的监听器,以便在用户进行编辑时提交更改。
阅读全文