2015-05-11 3 views
0

Каков правильный способ добавления EventHander в TableCell?javaFX TableCell с событием

сначала я был только эти две линии

@FXML private TableColumn EANCol; 
... 
EANCol.setCellValueFactory(new PropertyValueFactory<MyRow, String>("EAN")); 

и все работало, пока я не попробовал, добавив событие

EventHandler eh = new EventHandler<MouseEvent>(){ 
    @Override 
    public void handle(MouseEvent mouseEvent) { 
     if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){ 
      if(mouseEvent.getClickCount() == 2){ 
       System.out.print("Double clicked "); 
       System.out.println(mouseEvent.getTarget().toString()); 
      } 
     } 
    } 
}; 

EANCol.setCellFactory(new Callback<TableColumn, TableCell>() { 
    @Override 
    public TableCell call(TableColumn p) { 
     TableCell cell = new TableCell(); 
     cell.setOnMouseClicked(eh); 
     return cell; 
    } 
}); 

Проблема: Теперь я могу дважды щелкнуть на нем, но весь столбец empty, с нулевым значением.

ответ

1

Ячейка таблицы, созданная с помощью конструктора по умолчанию, фактически ничего не делает в своем методе updateItem(...), чтобы вызвать что-либо для отображения. Существует DEFAULT_CELL_FACTORY, определенный в TableColumn, который представляет собой фабрику, генерирующую ячейки таблицы «по умолчанию» (т. Е. Отображение строковой версии содержимого). Поэтому, если вы хотите, чтобы поведение по умолчанию с обработчиком событий было добавлено, вы можете:

EANCol.setCellFactory(new Callback<TableColumn<?,?>, TableCell<?,?>>() { 
    @Override 
    public TableCell call(TableColumn<?,?> p) { 
     TableCell<?,?> cell = TableColumn.DEFAULT_CELL_FACTORY.call(p); 
     cell.setOnMouseClicked(eh); 
     return cell; 
    } 
}); 
+0

Большое спасибо за такой быстрый ответ. он работает сейчас – user2760830

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