2013-11-29 4 views
1

В настоящее время я разрабатываю приложение Java FX, которое включает TableView. В этом TableView я хочу использовать редактируемый CheckBoxTableCell. Сначала у меня были все компоненты, добавленные в Java-код, используя макет МиГ. С этой конфигурацией все редактировалось (размер столбцов, порядок столбцов, флажок). Когда я передал весь код FXML с помощью Scene Builder, все работало отлично, за исключением TableView. Я не мог понять, как установить CellFactory и CellValueFactory в файле FXML (я видел несколько примеров, но не смог заставить его работать). Поэтому я решил установить эти заводы в методе initialize():Java FX TableView не редактируется с помощью FXML

voteCol.setCellValueFactory(new Callback<CellDataFeatures<DataItem, Boolean>,  ObservableValue<Boolean>>() { 

     @Override 
     public ObservableValue<Boolean> call(
       CellDataFeatures<DataItem, Boolean> arg0) { 
      return arg0.getValue().voteProperty(); 
     } 

    }); 

voteCol.setCellFactory(new Callback<TableColumn<DataItem, Boolean>, TableCell<DataItem, Boolean>>() { 

     @Override 
     public TableCell<DataItem, Boolean> call(
       TableColumn<DataItem, Boolean> arg0) { 
      return new CheckBoxTableCell<DataItem, Boolean>(); 
     } 

    }); 

voteCol.setEditable(true); 
dataTableView.setEditable(true); 

Вот FXML код генерируется Scene Builder

<TableView fx:id="dataTableView" editable="true" 
     mouseTransparent="true" pickOnBounds="false" prefHeight="-1.0" 
     prefWidth="-1.0" AnchorPane.bottomAnchor="41.0" 
     AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" 
     AnchorPane.topAnchor="80.0"> 
     <columns> 
      <TableColumn fx:id="voteCol" maxWidth="5000.0" minWidth="10.0" 
       prefWidth="32.0" text="Vote" visible="true" /> 
      ... 
     </columns> 
     <columnResizePolicy> 
      <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> 
     </columnResizePolicy> 
    </TableView> 

привязки данных с DataItem правильно работает.

Если бы кто-нибудь мог указать мне в правильном направлении, я был бы очень благодарен.

+0

Убедитесь, что ваши, что ваш контроллер указан в FXML файл, контроллер реализует Initializable, voteCol помечаются @FXML –

+0

я не выполнил Инициализируемый, спасибо! Но какой метод инициализации мне нужно использовать для какого кода? (Есть @FXML 'initialize()' и 'initialize (расположение URL, ресурсы ResourceBundle)' –

+0

см. Ответ ниже –

ответ

0

Скорее всего, ваша инициализация никогда не называется.

Убедитесь, что контроллер реализует Initializable интерфейс и initialize() метода имеет правильную подпись:

public class MyController implements Initializable { 

    @Override 
    public void initialize(URL location, Resources resources) { 
     //.... 
    } 
} 
+0

Хорошо, я пробовал это, но не получил лучшего результата. Функция вызывается, потому что привязки, установленные в этом работа. Хотя привязка работала и раньше –

Смежные вопросы