当前位置: 首页 > 知识库问答 >
问题:

在JavaFXTreeView中编辑项

惠志
2023-03-14

我有这个自定义树视图代码:

treeView.setCellFactory(new Callback<TreeView<Tree>, TreeCell<Tree>>()
        {
            @Override
            public TreeCell<Tree> call(TreeView<Tree> treeView)
            {
                final TreeCell<Tree> cell = new TreeCell<Tree>()
                {
                    @Override
                    protected void updateItem(Tree item, boolean empty)
                    {
                        super.updateItem(item, empty);
                        if (!empty)
                        {
                            setText(item != null ? item.toString() : "");
                            setGraphic(createImageView(item));
                            setContextMenu(createContextMenuTreeItem(item));
                        }
                        else
                        {
                            setText(null);
                            setGraphic(null);
                            setContextMenu(null);
                        }
                    }
                };

                return cell;
            }
        });

我希望能够使用内容菜单重命名树的节点。你能帮我实现这个吗?

共有1个答案

商同化
2023-03-14

只需在MenuItem的EventHandler中开始编辑树节点即可。下面是一个示例代码,它允许通过双击(我没有尝试更改/阻止)和上下文菜单进行基本编辑:

import javafx.application.Application;
import javafx.event.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.TextFieldTreeCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.*;
import javafx.util.converter.DefaultStringConverter;

public class TreeViewSample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Tree View Sample");

        TreeItem<String> rootItem = new TreeItem<String> ("Tree");
        rootItem.setExpanded(true);
        for (int i = 1; i < 6; i++) {
            TreeItem<String> item = new TreeItem<String> ("Item" + i);
            rootItem.getChildren().add(item);
        }

        TreeView<String> tree = new TreeView<String> (rootItem);
        tree.setEditable(true);
        tree.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){
            @Override
            public TreeCell<String> call(TreeView<String> p) {
                return new RenameMenuTreeCell();
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(tree);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }

    private static class RenameMenuTreeCell extends TextFieldTreeCell<String> {
        private ContextMenu menu = new ContextMenu();

        public RenameMenuTreeCell() {
            super(new DefaultStringConverter());

            MenuItem renameItem = new MenuItem("Rename");
            menu.getItems().add(renameItem);
            renameItem.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent arg0) {
                    startEdit();
                }
            });
        }

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

            if (!isEditing()) {
                setContextMenu(menu);
            }
        }
    }
}

这基本上是Oracle的示例13-1,其中包含自定义树单元。

 类似资料:
  • 我正在尝试编辑一个项目,下面是我的代码, 在编辑和提交值时, 如果和泛型类型是,则返回新的TextFieldTreeCell 当我使用时,我不知道如何使用String转换器, 如何缓解此异常。

  • 在“SQL 编辑器”选项卡,你可以创建和编辑视图的 SELECT 语句 SQL。Navicat Data Modeler 为编辑视图定义提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置 sql 格式及更多。 【提示】当你在视图创建工具创建视图,SELECT 语句将会自动生成。 美化 SQL(仅适用于非 Essentials 版) 若要格式化凌乱的 SQL 代码到一个结构良好的脚本,你

  • 问题内容: 我想在我的Gerrit项目中添加一个“已验证”标签,以允许Jenkins验证代码是否已构建并通过其测试等。 我知道我需要添加以下部分: 但是,如何获取该文件进行编辑? 问题答案: 项目设置保存在项目的Git存储库中。您可以通过从Gerrit克隆项目,进行更改,提交并推回Gerrit来对其进行编辑。 您可以对任何项目执行此操作,但是,如果您希望所有项目都可以继承它,则可以将其用作项目。

  • 问题内容: 我的代码出现了一些问题。 这是我数据库类中的方法 我尝试用我的按钮在这里执行它。 但是我得到这个错误:: 因此,基本上我只需要编写一些快速代码来测试它是否可以这种方式工作,所以不要介意命名。但是由于某种原因它无法正常工作,我尝试不这样做而只执行我在MSSQL中测试过的语句,就可以正常工作。 问题答案: 您的更新声明后有一个迷路者。去掉它。另外,您应始终使用 参数化查询来避免SQL注入。

  • 编辑文本 要选择一种文字图层,请执行下列操作之一: 选择“移动”工具 并在画布上双击文字图层。 选择横排文字工具 或竖排文字工具。在“图层”面板中选择文字图层,或者单击文本流以自动选择文字图层。 在文本中定位到插入点,然后执行下列操作之一: 单击以设置插入点。 选择要编辑的一个或多个字符。 根据需要输入文本。 要将更改应用到文字图层,请执行下列操作之一: 选择一个新工具。 在“图层”面板中单击某个

  • 我想编辑这个cn1lib。 在Eclipse中克隆项目后,如何更新cn1lib文件以在我自己的项目中使用它? [EDIT]:我克隆了CodenameOne项目,并尝试使用ant build.xml文件来构建它,但是我得到了以下错误: [javac]将505源文件编译到path \ workspace \ codename one \ codename one \ build \ classes[j