javafx:如何在这个setCellFactory方法中将“setComboBoxEditable”设置为true?

时间:2015-10-03 20:26:49

标签: java javafx

基本上,我已设法在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>>(){})

如果我对问题的任何部分不清楚,请告诉我。我可以添加更多细节以便澄清。

1 个答案:

答案 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);
        }

    }