私は以下のセルファクトリを列に適用します。テーブルセルのコンボボックス - アクションが実行されない
targetEnviroment.setCellFactory(new Callback<TableColumn<DevWorkTabBench, String>, TableCell<DevWorkTabBench, String>>() {
@Override
public TableCell<DevWorkTabBench, String> call(TableColumn<DevWorkTabBench, String> param) {
TableCell<DevWorkTabBench, String> cell = new TableCell<DevWorkTabBench, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
String status = null;
try {
status = getTableView().getItems().get(getIndex()).getObjectStatus();
} catch (IndexOutOfBoundsException ex) {
status = "";
}
if (status.equalsIgnoreCase("ReadyForDeployment")) {
ComboBox<String> comboBox = new ComboBox(environmentList);
comboBox.valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
commitEdit(newValue);
}
});
comboBox.setOnShown(new EventHandler<Event>() {
@Override
public void handle(Event event) {
getTableView().edit(getIndex(), getTableColumn());
getTableView().getSelectionModel().select(getIndex());
}
});
comboBox.setValue(item);
setGraphic(comboBox);
} else {
setGraphic(null);
}
if (empty) {
setGraphic(null);
}
}
};
return cell;
}
});
私が言及した状態にstatus
を変更すると、私は、その特定のセル内ComboBox
の外観を得るが、ドロップダウンは発生しません。複数回クリックしても、combobox
のアクションは実行されていないようです。私は扱われたもの以外の例外はありません。他の列は、編集可能であり、期待通りにタスクを実行します。
ここで何が間違っているかわかりません。誰でも助けてくれますか?
ありがとうございました@James_D。私の問題は解決しました。しかし、私はまだセルを編集可能にしてしまうのは理解できません。私は他の場所でも同じロジックを使用しています(「ツリービュー」のように)。同じコードが同じシステムで動作していますが、他の場所でも動作しています。同じロジックが望ましい出力を与えますが、ここでは出力しません。どのように2つの異なる結果をもたらすことができますか? –
私の推測では、 'edit()'を呼び出すと 'updateItem()'が呼び出されます。それで、グラフィックを新しいコンボボックス(そのポップアップは表示されません)で置き換えます。私。ユーザーがポップアップを表示させるとすぐに、コンボボックスを置き換えます。しかし、推測です。CheckBoxTableCellの実装の教訓は、 "ライブ"編集セル、つまりグラフィックが常に表示されているセル(コンボボックスではより適切だと思います)の場合のようです編集状態に入ったり出たりすることはまったくありません。 –
'if(isEditing()){comboBox.show();}'のように 'updateItem()'のロジックを試してみることもできますが、非常に壊れやすい方法です。 –