2015-05-11 94 views
0

將EventHander添加到TableCell的正確方法是什麼?javaFX TableCell with event

起初我只用了兩行

@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; 
    } 
}); 

問題:現在我可以雙擊它,但整個列空,值爲null。

回答

1

使用默認構造函數創建的表格單元在其updateItem(...)方法中實際上不會執行任何操作以導致顯示任何內容。在TableColumn中定義的DEFAULT_CELL_FACTORY表示產生「默認」表格單元的工廠(即,顯示內容的字符串版本)。所以如果你想添加一個事件處理程序的默認行爲,你可以這樣做:

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