2015-08-03 74 views
-1

我在我的項目中有1個問題。
我想有組合框內置了tableColum,爲此我使用:提交編輯不會調用setOneditCommit

tableColumn.setCellFactory(ComboBoxTableCell.forTableColumn(cbValues)); 

它的作品,但像醫生說:

默認情況下,ComboBoxTableCell呈現爲標籤未編輯時,以及處於編輯模式時作爲ComboBox。

,但我想看到每次下拉框中,所以我建立這個代碼

tableColumn.setCellFactory(new Callback<TableColumn<Ambientale, Integer>, TableCell<Ambientale, Integer>>() { 

     @Override 
     public TableCell<Ambientale, Integer> call(TableColumn<Ambientale, Integer> param) { 
      return new ComboBoxCell(cbValues); 
     } 
    }); 

和我ComboBoxCell是:

class ComboBoxCell extends TableCell<Ambientale, Integer> implements Callback<Object, Object>{ 
private ComboBox combo; 


public ComboBoxCell() { 
    combo = new ComboBox(); 
} 

public ComboBoxCell(ObservableList items) { 
    combo = new ComboBox(); 
    combo.setItems(items); 
    combo.setOnAction(new EventHandler() { 

     @Override 
     public void handle(Event event) { 
      System.out.println(" it's works"); 
      commitEdit((Integer)combo.getSelectionModel().getSelectedItem()); 
     } 
    }); 
} 

@Override 
public void updateItem(Integer item, boolean empty) { 
    super.updateItem(item, empty); 

    if (empty) { 
     setText(null); 
     setGraphic(null); 
    } else { 
     combo.getSelectionModel().select(item); 
     setGraphic(combo); 
     setContentDisplay(ContentDisplay.CENTER); 

    } 
} 

@Override 
public Object call(Object param) { 
    return new ComboBoxCell(); 
} 
} 

問題就在這裏!

class ComboBoxCell extends TableCell<Ambientale, Integer> implements Callback<Object, Object>{ 
private ComboBox combo; 


public ComboBoxCell() { 
    combo = new ComboBox(); 
} 

public ComboBoxCell(ObservableList items) { 
    combo = new ComboBox(); 
    combo.setItems(items); 
    combo.setOnAction(new EventHandler() { 

     @Override 
     public void handle(Event event) { 
      System.out.println(" it's works"); 
      commitEdit((Integer)combo.getSelectionModel().getSelectedItem()); 
     } 
    }); 
} 

@Override 
public void updateItem(Integer item, boolean empty) { 
    super.updateItem(item, empty); 

    if (empty) { 
     setText(null); 
     setGraphic(null); 
    } else { 
     combo.getSelectionModel().select(item); 
     setGraphic(combo); 
     setContentDisplay(ContentDisplay.CENTER); 

    } 
} 

@Override 
public Object call(Object param) { 
    return new ComboBoxCell(); 
} 

} commitEdit的(......)不叫:

tableColumn.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Ambientale, Integer>>() { 

     @Override 
     public void handle(TableColumn.CellEditEvent<Ambientale, Integer> t) { //aggiornare database cella singola 
      System.out.println("not called"); 
      //other stuffs 
     } 
    }); 

你能不能幫我請。

+0

我想這是因爲你不設置在右側的TableColumn的onEditCommit。嘗試tableColumn.setOnEditCommit(...);編輯了 –

+0

,這個問題有點小錯,不在代碼上。但tnx –

回答

1

它的工作原理,我不知道爲什麼,但它的工作原理。
我已經添加了這個對我ComboBoxCell

combo.focusedProperty().addListener(new ChangeListener<Boolean>() { 
       @Override 
       public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { 
        if (newValue) { 
         getTableView().edit(getIndex(), getTableColumn()); 
        } else { 
         commitEdit((Integer)combo.getSelectionModel().getSelectedItem()); 
        } 
       } 
    });