GWT:右键单击选择一个 TreeItem

2024-07-03

我正在捕获右键单击事件以显示上下文菜单。我无法弄清楚的是,在显示上下文菜单之前,如何通过右键单击实际选择 TreeItem。

感谢所有帮助。

 private Tree tree = new Tree() {
  @Override
  public void onBrowserEvent(Event event) {   
    if (event.getTypeInt() == Event.ONCONTEXTMENU) {
     DOM.eventPreventDefault(event);          
     showContextMenu(event);
    }   
   super.onBrowserEvent(event);
  }

  @Override
  protected void setElement(Element elem) {
   super.setElement(elem);
   sinkEvents(Event.ONCONTEXTMENU);
  }

 };

ONMOUSEDOWN 事件在 ONCONTEXTMENU 之前触发。您是否尝试过监听 onMouseDown 事件并设置所选项目?沿着这些思路:

@Override
public void onBrowserEvent(Event event) {   
switch (DOM.eventGetType(event)) {
    case Event.ONMOUSEDOWN:
        if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) {
            TreeItem selectedItem = findSelectedItem(event);
            if (selectedItem != null) {
                selectedItem.setSelected(true);
            }
        } else {
            super.onBrowserEvent(event);
        }
        break;
    case Event.ONCONTEXTMENU:
        showContextMenu(event);
        break;
    default:
        super.onBrowserEvent(event);
        break;
    }

findSelectedItem 遍历树查找所选项目:

TreeItem findSelectedItem(Event e) {
    return findSelectedItemRecursive(event.getClientX(), event.getClientY());
}

TreeItem findSelectedTreeItemRecursive(TreeItem root, int x, int y) {
    if (null == root) {
        int count = getItemCount();
        for (int i = 0; i < count; i++) {
            TreeItem selected = findSelectedTreeItemRecursive(getItem(i), x, y);
            if (selected != null) {
               return selected;
            }
        }
        return null;
    }
    int count = item.getChildCount();
    for (int i = 0; i < count; i++) {
        TreeItem selected = findSelectedTreeItem(item.getChild(i), x, y);
        if (selected != null) {
            return selected;
        }
    }

    if (x >= item.getAbsoluteLeft()
        && x <= item.getAbsoluteLeft() + item.getOffsetWidth()
        && y >= item.getAbsoluteTop()
        && y <= item.getAbsoluteTop() + item.getOffsetHeight()) {
        return item;
    }
    return null;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GWT:右键单击选择一个 TreeItem 的相关文章

  • GWT EditTextCell:如何增加EditTextCell中可编辑文本框的宽度?

    我在我的项目中使用GWT2 3 当用户单击 editableTextCell 时 我想增加 editableTextBox 的宽度 问题是我的列宽是 200 Px 当用户单击 editableTextCell 时 EditableTextC
  • 如何连接 GWT 超链接点击处理程序?

    我是 GWT 的新手 正在努力实现以下目标 这是我编写的代码 public class MyWebApp implements EntryPoint The main container for everything the user se
  • GWT 导致 Eclipse 无法在 Windows XP 上启动

    单击 eclipse 会显示启动屏幕 然后应用程序将被静默终止 并且不会出现任何错误消息 log 文件包含以下信息 汇总 ENTRY org eclipse ui 4 4 2012 11 09 11 33 45 323 MESSAGE Cl
  • Mysql 选择记录的倒数对,不重复

    我有一个包含两列的表 人物ID person id 第一个字段 id 正在与谁合作 我需要选择所有合作对 这很容易 但问题出在哪里 表有如下数据 987 102 103 104 104 103 21 102 根据这些数据 我应该有 3 个合
  • 带有 JPA 的 GWT - 无持久性提供程序

    GWT 与 JPA 我的 eclipse 工作区中有两个项目 让我们命名它们 JPA项目 GWT项目 JPAProject 包含 JPA 配置内容 persistence xml 实体类等 GWTProject 是一个示例 GWT 项目 取
  • 将平面表解析为树的最有效/优雅的方法是什么?

    假设您有一个存储有序树层次结构的平面表 Id Name ParentId Order 1 Node 1 0 10 2 Node 1 1 1 10 3 Node 2 0 20 4 Node 1 1 1 2 10 5 Node 2 1 3 10
  • bootstrap-select 不代理点击事件

    我有选择元素
  • GWT 树的工具提示:向节点添加鼠标悬停

    我正在尝试为 GWT 中的树节点添加工具提示 因此 我想为树的节点而不是树本身添加一个鼠标悬停侦听器 Treelistener 接口似乎是我想要的 但现在已弃用它来代替处理程序系统 我不太明白如何在单元格上获得鼠标悬停行为 因为我似乎只能将
  • 如何在 GWT 客户端显示文件而不是下载:

    我需要很少的帮助来实现这一点 在我的应用程序中 用户可以将文件上传到服务器并将其存储为 blob 对象 现在我需要根据请求向用户显示它们 我要做的显示在下面的代码中 在服务器端 我将内容放入响应 这段代码是基于这篇博文实现的水谈 http
  • vuejs 2.0.0 中选择的占位符

    我正在使用创建一个网络应用程序vuejs 2 0 https vuejs org guide forms html 我使用以下代码创建了简单的选择输入
  • 计算行数并仅获取表中的最后一行

    我有一张桌子叫employeexam其结构和数据是这样的 id course id employee id degree date 1 1 3 8 2013 01 14 2 2 4 15 2013 01 14 3 2 4 17 2013 0
  • 非数字列中的 SQL MAX 函数

    据我了解 MAX 函数 它应返回给定列的最大值 对于数值 例如工资列 对我来说很清楚 这是我在教程中找到的唯一应用程序 但是 我无法理解它在非数字列的情况下如何工作 我的问题源于这个练习 在 sql ex ru 上 找出只生产同类型型号的制
  • 如何使用 GWT 创建可点击的链接?

    我想与 GWT 建立一些可点击的链接 我不确定这是否是最佳实践 基本上我想要类似这样的东西 如果我用 html 编写的话 a href index html alt Link a Use a 超级链接 http google web too
  • 在 PowerShell 中按列拆分文本

    我是一个 PowerShell 新手 通常是 Bash 目前正在尝试获取 qwinsta 输出以显示谁以 rdpwd rdesktop 用户身份登录 以便我可以根据用户名列表检查每个用户名 如果它们不匹配 请将其注销 我目前正在解决两个问题
  • 如何有效地从kd树中找到k个最近邻居

    实际上这个问题之前已经被问过 但据我所知 尚未提供适当的答案 我了解如何实现 k d 树以及最近邻搜索如何工作 然而 即使环顾四周 我也找不到一种有效的方法来使用 k d 树非常有效地搜索 k 个最近邻居 我只能想到找到最近的邻居并将其删除
  • 自定义控件中 ContextMenu 的正确绑定

    我在自定义控件中找不到 ContextMenu 菜单项的正确绑定
  • gwt“CssResource.style”可能值,如何打开混淆

    是否有 gwt xml 的文档 即包含所有可接受值的设置列表 就我而言 我在调试 开发环境中关闭了 CSS 混淆 但对于生产环境我想打开它 我对 gwt enableDebugId 所做的相同 在 gwt xml 中为 true 在 pro
  • MySQL插入固定值和多select结果的数据

    假设我有一个如下所示的表结构 通知表 id receiver id type content time 接收者 ID 来自用户表 用户表 id username 内容和时间来自广播表 广播表 id content time 因此 当我需要插
  • onContextMenuClosed 未在 Fragment 中实现

    奇怪的是 Fragment 和 v4 Fragment 都没有实现 onContextMenuClosed 还有其他事件 例如 onCreateContextMenu 和 onContextItemSelected 当上下文菜单关闭时 我需
  • GWT UiBinder 不加载样式表

    我想使用 UiBinder 制作一个 GWT 小部件 所以我做了 UserPanel ui xml 像这样

随机推荐

  • 在 vim 中使用 synmaxcol 折叠

    有时 当我在做一个项目时 我想使用一些数据 通常 数据都在一行上并且非常庞大 gt 25k 个字符 我明白我可以set nowrap并让这条线从屏幕上消失 但我倾向于喜欢set wrap由于其他原因 因此 作为一种解决方法 我想将这些长线隐
  • Cocoa:拖放任何文件类型

    我正在尝试创建一个接受任何文件类型并将其上传到服务器的拖放区域 使用 ASIHTTPRequest 我查看了Apple提供的以下示例 http developer apple com library mac samplecode Cocoa
  • Cocoa:拖放任何文件类型

    我正在尝试创建一个接受任何文件类型并将其上传到服务器的拖放区域 使用 ASIHTTPRequest 我查看了Apple提供的以下示例 http developer apple com library mac samplecode Cocoa
  • sympy:收集矩阵系数的符号?

    我正在尝试分解一个表达式 并将系数分离为矩阵形式 这样 密切相关将 sympy 表达式分解为矩阵系数 https stackoverflow com questions 30112645 factor sympy expression to
  • sympy:收集矩阵系数的符号?

    我正在尝试分解一个表达式 并将系数分离为矩阵形式 这样 密切相关将 sympy 表达式分解为矩阵系数 https stackoverflow com questions 30112645 factor sympy expression to
  • JavaScript 中有睡眠/暂停/等待函数吗? [复制]

    这个问题在这里已经有答案了 有没有一个JavaScript函数可以模拟sleepPHP 中的函数 一个暂停代码执行 x 毫秒 然后从中断处恢复的函数 我在 Stack Overflow 上找到了一些东西 但没有什么用处 您需要将代码重构为多
  • JavaScript 中有睡眠/暂停/等待函数吗? [复制]

    这个问题在这里已经有答案了 有没有一个JavaScript函数可以模拟sleepPHP 中的函数 一个暂停代码执行 x 毫秒 然后从中断处恢复的函数 我在 Stack Overflow 上找到了一些东西 但没有什么用处 您需要将代码重构为多
  • iOS DidMoveToWindow 无限循环

    我正在研究 iOS NUI 框架源代码 我发现了以下代码行 但我不知道它是如何工作的 void override didMoveToWindow if self isNUIApplied self applyNUI self overrid
  • iOS DidMoveToWindow 无限循环

    我正在研究 iOS NUI 框架源代码 我发现了以下代码行 但我不知道它是如何工作的 void override didMoveToWindow if self isNUIApplied self applyNUI self overrid
  • Solr服务器HttpParse错误

    您好 当我使用 http 客户端向 solr 服务器发送查询时 solr 服务器打印异常日志 显示 HttpParser full 我在jetty服务器上运行solrcloud 4 0 这是码头的问题吗 这可能是什么原因 我该如何解决 我怀
  • Solr服务器HttpParse错误

    您好 当我使用 http 客户端向 solr 服务器发送查询时 solr 服务器打印异常日志 显示 HttpParser full 我在jetty服务器上运行solrcloud 4 0 这是码头的问题吗 这可能是什么原因 我该如何解决 我怀
  • 为什么我的 XAML 突然崩溃了?

    我在项目中创建的文件夹 视图 中向项目添加了 基本页面 起初一切都很好 但 突然 设计视图失败并显示 系统对象处置异常 安全手柄已关闭 这是 XAML 我还没有更改生成的默认 XAML 中的任何内容
  • 为什么我的 XAML 突然崩溃了?

    我在项目中创建的文件夹 视图 中向项目添加了 基本页面 起初一切都很好 但 突然 设计视图失败并显示 系统对象处置异常 安全手柄已关闭 这是 XAML 我还没有更改生成的默认 XAML 中的任何内容
  • Nibabel:IOError:[Errno 24]打开的文件太多:

    我有一个 python 程序 它生成多个线程 从一组常见图像文件中提取与各种器官相对应的补丁 一切都很好 直到我创建了一个额外的线程 之后我开始遇到 IO 错误 24 打开的文件太多 我用来加载医学图像的 nibabel 框架似乎使文件保持
  • Nibabel:IOError:[Errno 24]打开的文件太多:

    我有一个 python 程序 它生成多个线程 从一组常见图像文件中提取与各种器官相对应的补丁 一切都很好 直到我创建了一个额外的线程 之后我开始遇到 IO 错误 24 打开的文件太多 我用来加载医学图像的 nibabel 框架似乎使文件保持
  • 对类型“Route”的引用声称它是在“System.web”中定义的

    我正在尝试向我的应用程序添加一个区域 但它会抛出以下错误 上下文 MapRoute 我的应用程序中引用了 system web 和 system web mvc dll 可能是什么问题 我的应用程序面向 Net core 2 0 请问有什么
  • 对类型“Route”的引用声称它是在“System.web”中定义的

    我正在尝试向我的应用程序添加一个区域 但它会抛出以下错误 上下文 MapRoute 我的应用程序中引用了 system web 和 system web mvc dll 可能是什么问题 我的应用程序面向 Net core 2 0 请问有什么
  • 使用财务数据计算数据框的回报

    我有一个包含每月财务数据的数据框 In 89 vfiax monthly head Out 89 year month day d open close high low volume aclose 2003 01 31 2003 1 31
  • 使用财务数据计算数据框的回报

    我有一个包含每月财务数据的数据框 In 89 vfiax monthly head Out 89 year month day d open close high low volume aclose 2003 01 31 2003 1 31
  • GWT:右键单击选择一个 TreeItem

    我正在捕获右键单击事件以显示上下文菜单 我无法弄清楚的是 在显示上下文菜单之前 如何通过右键单击实际选择 TreeItem 感谢所有帮助 private Tree tree new Tree Override public void onB