2014-12-19 21 views
0

我有这样的习俗JavaFX的表厂电池:仅在表行TRIGER鼠标事件点击

Callback<TableColumn, TableCell> cellFactory = new Callback<TableColumn, TableCell>() 
     { 
      @Override 
      public TableCell call(TableColumn p) 
      { 
       TableCell cell = new TableCell<TableDataObj, Object>() 
       { 
        @Override 
        public void updateItem(Object item, boolean empty) 
        { 
         super.updateItem(item, empty); 
         setText(empty ? null : getString()); 
         setGraphic(null); 
        } 

        private String getString() 
        { 
         return getItem() == null ? "" : getItem().toString(); 
        } 
       }; 

       cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() 
       { 
        @Override 
        public void handle(MouseEvent event) 
        { 
         if (event.getClickCount() > 1) 
         { 
          EventsPanel ep = new EventsPanel(); 
          TableDataObj person = (TableDataObj) table.getSelectionModel().getSelectedItem(); 
          ep.GeneralConfiguration(person); 
         } 
        } 
       }); 
       return cell; 
      } 

     }; 

我注意到,当我用鼠标选择表行,我可以每次触发事件,我点击表。我如何才能修复代码来触发事件,只有当我对表格行进行调整时才会触发事件。

+0

不检查'if(!cell.isEmpty()){...}'是否工作? –

回答

0

喜欢的东西:

private TableView<Person> myTable; // you have this Variable on your Class 
if (myTable.getSelectionModel().getSelectedItem() != null) { 
    /* Do your magic */ 
} 

在你的听众应该工作。

+0

不 - 这是假设低级事件触发了语义变化_before_它到达了侦听器。无法保证通知的顺序。 – kleopatra