thisColumn.setCellFactory(new Callback<TreeTableColumn<Obj, String>, TreeTableCell<Obj, String>>() {
@Override
public TreeTableCell<Task, String> call(final TreeTableColumn<Task, String> param) {
JFXComboBox<String> jfxComboBox = new JFXComboBox<>();
jfxComboBox.setMinWidth(100.0);
jfxComboBox.setPrefWidth(100.0);
jfxComboBox.setItems(Class.profiles);
jfxComboBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
/** N/A **/
}
});
final TreeTableCell<Task, Void> cell = new TreeTableCell<Task, Void>() {
HBox hBox = new HBox();
Boolean result = hBox.getChildren().addAll(jfxComboBox);
@Override
public void updateItem(Void item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
setGraphic(hBox);
}
}
};
return cell;
}
});
我目前正在尝试在TreeTableView中显示JFXComboBox(ComboBox),并使用当前代码添加它。但是,在回调中,我无法访问jfxComboBox
所在的行。
我注意到,如果我使用TreeTableColumn.CellDataFeatures
而不是TreeTableColumn,它会让我访问param.getValue()。getValue()这正是我需要的,但是之后我就可以了无法返回TreeTableCell以显示我的jfxComboBox。
关于如何实现这一目标的任何建议?
PS:
我试图避免使用.getSelectionModel().getSelectedItem()
,因为当我点击ComboBox时,我还没有选择当前行/可能在点击组合框之前没有选择任何行。但是我有兴趣看看是否有一种方法可以触发jfxComboBox所在的父行的选择。
答案 0 :(得分:2)
可以解决您问题的示例:
StatusBarItem logo = new StatusBarItem
{
Content = new Image
{
Source = new BitmapImage(new Uri("logo.ico", UriKind.Relative)),
Width = 16,
Height = 16
}
};
Grid.SetColumn(logo, 2);
StatusBarItemsSource.Add(logo);