2016-05-23 5 views
0

Я определил TableColumn с типом флажка, как показано ниже в Javafx.Как вызвать событие onclick на флажке внутри TableColumn в javafx

TableColumn<MyObject, Boolean> cbCol = new TableColumn<>(strColName); 
cbCol.setCellFactory(CheckBoxCellFactory.forTableColumn(cbCol)); 

Теперь мне нужно, чтобы вызвать событие OnClick (для выполнения некоторой операции) на любом из флажка щелкнул внутри TableColumn. Есть ли способ сделать это?

Любая помощь очень полезна.

ответ

0

Я использую нижеследующую фабрику клеток custome, чтобы получить checkboxes в tableCell. Вы можете использовать то же самое и прослушать onClick. Ниже приведен код:

final class BooleanCell extends TableCell<MyObject, Boolean> { 

private CheckBox checkBox; 

public BooleanCell() { 
    checkBox = new CheckBox(); 
    checkBox.setOnAction((evt) -> { 

     getTableView().getItems().get(getIndex()).setCheck(new SimpleBooleanProperty(checkBox.isSelected())); 

     } 
    }); 
    this.setGraphic(checkBox); 
    this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
    this.setEditable(true); 
} 

@Override 
public void startEdit() { 
    super.startEdit(); 
    if (isEmpty()) { 
     return; 
    } 
    checkBox.requestFocus(); 
} 

@Override 
public void cancelEdit() { 
    super.cancelEdit(); 
//   checkBox.setDisable(true); 
} 

@Override 
public void commitEdit(Boolean value) { 
    super.commitEdit(value); 
//   checkBox.setDisable(true); 
} 

@Override 
public void updateItem(Boolean item, boolean empty) { 
    super.updateItem(item, empty); 
    if (empty) { 
     setGraphic(null); 
    } else { 
     if (item != null) { 
      checkBox.setAlignment(Pos.CENTER); 
      checkBox.setSelected(item); 
     } 
     setAlignment(Pos.CENTER); 
     setGraphic(checkBox); 
    } 
} 
} 

выше cell factory может быть применен к tableColumn, как указано ниже.

Callback<TableColumn<MyObject, Boolean>, TableCell<MyObject, Boolean>> booleanCellFactory = new Callback<TableColumn<MyObject, Boolean>, TableCell<MyObject, Boolean>>() { 
       @Override 
       public TableCell<MyObject, Boolean> call(TableColumn<MyObject, Boolean> p) { 
        return new BooleanCell(); 
       } 
      }; 

tbColCheck.setCellFactory(booleanCellFactory); 
Смежные вопросы