2014-12-27 2 views
1

Я пытаюсь отобразить ChoiceBox внутри TableView в JavaFX. Прямо сейчас я просто пытаюсь проверить, могу ли я заставить это работать, поэтому я генерирую поддельные данные на фабрике ячеек, но я даже не могу заставить это работать.Как создать фабрику ячеек таблицы в JavaFX для отображения ChoiceBox?

Мой IDE дает мне ошибку,

forTableColumn (javafx.collections.ObservableList<T>) in ChoiceBoxTableCell cannot be applied 
to    (javafx.collections.ObservableList<java.lang.String>) 

Вот мой код.

private ListView<RequirementsProperty> guiPropertyList; 
private TableColumn<RequirementsProperty, String> guiSpecifierColumn; 

guiSpecifierColumn.setCellFactory(
       new Callback<TableColumn<RequirementsProperty, String>, TableCell<RequirementsProperty, String>>() { 
        @Override 
        public TableCell<RequirementsProperty, String> call(TableColumn<RequirementsProperty, String> param) { 
         ObservableList<String> testlist = FXCollections.observableArrayList("A", "B", "C"); 
         return ChoiceBoxTableCell.forTableColumn(testlist); 
        } 
       }); 

Кто-нибудь знает, что я делаю неправильно? Я просто хочу отобразить список, содержащий A, B и C прямо сейчас, а затем я могу перейти к отображению моих собственных данных.

+0

Пробовали ли вы 'ChoiceBoxTableCell forTableColumn (testlist);'.? Какую версию Java вы используете? – eckig

ответ

2

ChoiceBoxTableCell.forTableColumn(...) сам возвращает Callback (т. Е. Он возвращает cellFactory, а не ячейку).

Вы можете просто сделать

ObservableList<String> testlist = FXCollections.observableArrayList("A", "B", "C"); 
guiSpecifierColumn.setCellFactory(ChoiceBoxTableCell.forTableColumn(testlist)); 

Если вы реализуете завод самостоятельно, его метод call(...) необходимо вернуть фактическую ячейку. В этом случае вы бы просто построить ChoiceBoxTableCell непосредственно и вернуть его:

guiSpecifierColumn.setCellFactory(
    new Callback<TableColumn<RequirementsProperty, String>, TableCell<RequirementsProperty, String>>() { 
     @Override 
     public TableCell<RequirementsProperty, String> call(TableColumn<RequirementsProperty, String> param) { 
       ObservableList<String> testlist = FXCollections.observableArrayList("A", "B", "C"); 
       return new ChoiceBoxTableCell(testlist); 
     } 
    }); 
Смежные вопросы