基本上,我已设法在comboBoxTableCell
内创建tableView
。唯一的问题是我无法输入任何用户输入,如果没有此功能,comboBoxTableCell
与我的Choice
框表格单元格没有区别。
现在从this开始,如果我可以为setComboBoxEditable(true)
设置comboBoxTableCell
,那么我认为我的问题会被排序。问题是如何在以下代码行中执行此操作?
public TableColumn<Trade,String> tableColumnX;
tableColumnX.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
tableColumnX.setCellFactory(ComboBoxTableCell.forTableColumn(obsList));
我已经使用我在post上看到的内容进行了第二次尝试,
tableColumnX.setCellFactory(new Callback<TableColumn<Product, String>,ComboBoxTableCell<Product,String>>() {
@Override
public ComboBoxTableCell<Product, String> call(TableColumn<Product, String> param) {
ComboBoxTableCell ct= new ComboBoxTableCell<>();
ct.setComboBoxEditable(true);
return ct;
}});
这次我收到一个错误:
The method setCellFactory(Callback<TableColumn<Product,String>,TableCell<Product,String>>) in the type TableColumn<Product,String> is not applicable for the arguments (new Callback<TableColumn<Product,String>,ComboBoxTableCell<Product,String>>(){})
如果我对问题的任何部分不清楚,请告诉我。我可以添加更多细节以便澄清。
答案 0 :(得分:0)
使用Callback<TableColumn<Product, String>,TableCell<Product,String>>()
代替Callback<TableColumn<Product, String>,ComboBoxTableCell<Product,String>>()
试试这个:
tableColumnX.setCellFactory(new Callback<TableColumn<Product, String>,TableCell<Product,String>>() {
@Override
public TableCell<Product, String> call(TableColumn<Product, String> param) {
ComboBoxTableCell<Product, String> ct= new ComboBoxTableCell<>();
ct.setComboBoxEditable(true);
return ct;
}});
以下是一个示例
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.ComboBoxTableCell;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
/**
*
* @author
*/
public class Javafx_test extends Application {
@Override
public void start(Stage stage) {
TableColumn<String, String> tableColumn = new TableColumn<>("Column");
tableColumn.setCellValueFactory(cellData
-> {
return new SimpleStringProperty(cellData.getValue());
}
);
tableColumn.setCellFactory(tableCol -> {
ComboBoxTableCell<String, String> ct = new ComboBoxTableCell<>();
ct.getItems().addAll("1", "2");
ct.setComboBoxEditable(true);
return ct;
});
TableView<String> tableView = new TableView<>();
tableView.setEditable(true);
tableView.getColumns().add(tableColumn);
tableView.getItems().addAll("4", "5");
BorderPane root = new BorderPane(tableView);
Scene scene = new Scene(root, 200, 100);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}