javafx - 如何为 TextFieldTreeCell 设置图形
问题描述
我用普通的 treecells 和 cellfactory 制作了一个 treeview 来显示我的自定义对象。
我希望能够在树视图中编辑对象名称。
所以我从一个普通的 TreeCell 切换到一个 TextFieldTreeCell,这样我就可以在树中编辑我的对象的名称。
但是现在 updateitem 中的 setGraphic 方法不起作用。我究竟做错了什么?
我也不确定如何从 fromString 方法访问自定义对象以编辑对象。
treeView.setCellFactory(new Callback<TreeView<MenuItem>, TreeCell<MenuItem>>() {
@Override
public TreeCell<MenuItem> call(TreeView<MenuItem> menuItemTreeView) {
// MenuItemTreeCell menuItemTreeCell = new MenuItemTreeCell();
TextFieldTreeCell<MenuItem> cell = new TextFieldTreeCell<MenuItem>(new StringConverter<MenuItem>() {
@Override
public String toString(MenuItem menuItem) {
if(menuItem==null){
return "";
}
return menuItem.getName();
}
@Override
public MenuItem fromString(String s) {
// todo add code for changing name
return null;
}
})
{
@Override
public void updateItem(MenuItem item, boolean empty) { // empty was b
super.updateItem(item, empty);
// setText((empty || item == null) ? "" : item.getName());
// checking if not null , and then what class to determ icon
if (item != null) {
switch (item.getClass().getSimpleName()) {
case "Group":
setGraphic(new ImageView(caseicon));
break;
case "Item":
setGraphic(new ImageView(basicicon));
break;
case "ClassItem":
setGraphic(new ImageView(classicon));
break;
case "MechanicItem":
setGraphic(new ImageView(mechanicicon));
break;
}
} else {
// no icon
setGraphic(null);
}
super.updateItem(item, empty);
}
};
解决方案
推荐阅读
- c++ - 读写二进制文件的最有效方法
- android-notifications - android可以用deeplink开普通班吗?
- web3 - Web3 合同调用是 alawys 返回 null
- python - 在子类 tf.keras.Model 的调用方法中使用 GRUCell 进行 For 循环
- c++ - CAS 操作是否必须使用所有 3 个值锁定缓存行?
- java - 迭代列表并使用另一个列表中可用的数据设置值
- visual-studio-2019 - Visual Studio 2021 安装导致 2019 无法运行!:如何修复错误消息 C:\windows\system32\msxml6.dll is not designed to run on windows
- angular - Angular、CloudFront、OAI - 返回的存储桶中的顶级对象,但不是带有路径的对象
- python - 无法在 selenium Python 中设置代理
- amazon-web-services - AWS-CLI - 新命令