jcombobox 作为单元格编辑器 java.awt.IllegalComponentStateException:组件必须显示在屏幕上才能确定其位置

2023-12-02

我使用自定义 JComboBox 作为 JTable 中的单元格编辑器。当用户使用键盘控件进入单元格时,它会尝试打开弹出窗口。这会导致以下错误:

java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
    at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:1964)
    at java.awt.Component.getLocationOnScreen(Component.java:1938)
    at javax.swing.JPopupMenu.show(JPopupMenu.java:887)
    at javax.swing.plaf.basic.BasicComboPopup.show(BasicComboPopup.java:191)
    at javax.swing.plaf.basic.BasicComboBoxUI.setPopupVisible(BasicComboBoxUI.java:859)
    at javax.swing.JComboBox.setPopupVisible(JComboBox.java:796)

我看到一些文章说这是一个已知问题,解决方案是设置:

    comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);

然而这并没有帮助。无论如何,这应该做什么?

我读过的所有有关此问题的帖子和文章对于问题的本质都非常模糊。

有谁了解这个问题发生的本质?我的组合框是非常自定义的,因此它将有助于理解问题的基础,以便我可以修复代码。

这是在捕获并调用 setPopupVisible(true) 的组合框上获得焦点事件时触发的;

 public void focusGained(java.awt.event.FocusEvent e)
 {
        //if focus is gained then make sure we show the popup if it is suppose to be visible
            setPopupVisible(true);
        //and highlight the selected text if any
        comboTextEditor.setCaretPosition(comboTextEditor.getText().length());
        comboTextEditor.moveCaretPosition(0);
 }

顺便说一句,我在 Java 1.7_40 中得到与 Java 1.6_45 相同的结果

完整的堆栈跟踪:

Exception in thread "AWT-EventQueue-1" java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
    at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:1964)
    at java.awt.Component.getLocationOnScreen(Component.java:1938)
    at javax.swing.JPopupMenu.show(JPopupMenu.java:887)
    at javax.swing.plaf.basic.BasicComboPopup.show(BasicComboPopup.java:191)
    at javax.swing.plaf.basic.BasicComboBoxUI.setPopupVisible(BasicComboBoxUI.java:859)
    at javax.swing.JComboBox.setPopupVisible(JComboBox.java:796)
    at com.mbs.generic.view.swing.combobox.AutoCompleteComboBox$1.focusGained(AutoCompleteComboBox.java:185)
    at java.awt.AWTEventMulticaster.focusGained(AWTEventMulticaster.java:203)
    at java.awt.Component.processFocusEvent(Component.java:6179)
    at java.awt.Component.processEvent(Component.java:6046)
    at java.awt.Container.processEvent(Container.java:2039)
    at java.awt.Component.dispatchEventImpl(Component.java:4653)
    at java.awt.Container.dispatchEventImpl(Container.java:2097)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:901)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:513)
    at java.awt.Component.dispatchEventImpl(Component.java:4525)
    at java.awt.Container.dispatchEventImpl(Container.java:2097)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:607)
    at java.awt.EventQueue$1.run(EventQueue.java:605)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:621)
    at java.awt.EventQueue$2.run(EventQueue.java:619)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

thanks


首先,让我解释一下什么comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);做。通常,将鼠标悬停在某个项目上或按键盘上的箭头键将导致选择该项目上的项目JComboBox立即地。自评选活动以来JComboBox将导致单元格编辑过程停止,此行为不适合表格单元格。因此,当设置此特殊客户端属性时,项目将在弹出列表中显示为选中状态,但不会在JComboBox然而。只有提交的项目(通过单击或 Enter 键)才会更改在JComboBox导致编辑结束。至少,这适用于BasicLookAndFeel及其衍生物。

你遇到的问题完全不同。正如异常消息和堆栈跟踪清楚地表明的那样,外观尝试打开JPopupMenu与相关的JComboBox(按照您的要求)但它无法确定弹出菜单在屏幕上的位置,因为您的JComboBox不是屏幕上显示的镜头。它想要的位置的原因JComboBox是它打开相对于JComboBox.

剩下的问题是为什么您收到focusGained from a JComboBox这没有显示在屏幕上(或者为什么你认为你这样做了)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jcombobox 作为单元格编辑器 java.awt.IllegalComponentStateException:组件必须显示在屏幕上才能确定其位置 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • MySQL 时区

    是否有 MySQL 时区的详尽列表 看来有效值time zoneMySQL 中的设置取决于主机操作系统 但我无法找到可能值的列表 我需要时间显示卡尔加里当地时间 默认情况下 至少在基于 Debian 的安装中 不会将时区数据加载到 MySQ
  • Google 地图 API RefererNotAllowedError

    我创建了一个用于 Google Maps JavaScript API 的 Google 密钥 一切正常 直到我添加到下面的凭据接受来自这些 HTTP 引荐来源网址的请求 我以这种格式添加了引荐来源网址 example com 根据凭证页面
  • Android isodep.isConnected() 返回 false 且最大收发长度:0 字节,对于 B 型卡。

    我正在开发一个 Android 应用程序 需要读取并显示 B 型卡中的数据 卡连接良好 但是当isodep isConnected 被调用它返回 false 我扫描了这张卡TagInfo应用程序 由 NXP 提供 可在 Play Store
  • JAudioTagger 和 Android - 更改 mp3 中的值?

    我可以从音频文件中读取标题 艺术家 专辑封面和其他信息等元信息 但我从未能够成功写入元信息 大家有这方面的经验吗 有比 JAudioTagger 更好的库吗 我会提供一些示例代码 但我尝试了十几种不起作用的方法 就像是 AudioFile
  • 无扩展名文件上的 Eclipse 语法高亮显示?

    我有一个 perl CGI 脚本 需要具有特定的无扩展名文件名才能从使用它的软件正确运行 我在 Ubuntu 11 04 Linux 上使用 Eclipse 3 7 0 作为我的 IDE 它不会突出显示文件上的语法 也不会使用有限的自动完成
  • Node.js 错误:连接 ECONNREFUSED

    我是节点新手 在一个简单的教程中遇到了这个错误 我在 OS X 10 8 2 上从 CodeRunner 和终端尝试此操作 我也尝试过将我的模块放入node modules folder 我可以看出这是某种连接问题 但我不知道为什么 eve
  • Spring 集成流程异步中的错误处理

    我有以下 Spring Integration 配置 它允许我从 MVC 控制器调用网关方法并让控制器返回 而集成流将在不阻塞控制器的单独线程中自行继续 但是 我无法弄清楚如何让我的错误处理程序适用于此异步流程 我的网关定义了错误通道 但由
  • SQL选择每个部门最大销售额的日期[重复]

    这个问题在这里已经有答案了 我对编写一个棘手的查询感到困扰 我有下表 对于每个部门 我想打印利润最大的日期 我尝试自己提出这样的查询 Select DISTINCT Name Date sale MAX A as B FROM SELECT
  • 如何在 CSS 中应用从外到内的渐变,仅应用于边框?

    根据 MDN 文档 这似乎没有得到明确支持 所以我在下面的链接代码笔中尝试如下 我知道嵌套 div 是丑陋的 不能成为一个好的可重用样式组件 但我不知道还有什么方法可以达到这种效果 任何有关尝试实现此目标的方法的指导将不胜感激 这是演示我当
  • 无法从维基百科 API 获取数据

    let dataObj const query marvel fetch https en wikipedia org w api php action query titles query prop revisions rvprop co
  • 空手道加特林:未拾取对功能文件的更改

    我正在尝试构建一系列触发空手道场景的加特林测试 我对功能文件所做的更改只是偶尔会被加特林拾取 例如 在下面的功能文件代码中 运行前四项 包括注释掉的 relationships 行 Feature This feature attempts
  • 为什么 .split("\\") 会生成异常?

    我有一个代表目录的字符串 其中 用于分隔文件夹 我想根据 String address C saeed test String splited address split 然而 这给了我一个java util regex PatternSy
  • 使用 HTML 文件输出 PDF

    我有一个 HTML 文件 我用它来发送电子邮件 但在某些情况下 我希望它只是使用该文件来创建相同模板的 PDF 我已经让它大部分正常工作了 它创建文件 运行评估并获取内容 但它实际上并不渲染 html 它只是将所有 html 符号保留在原处
  • ASP.NET 5 添加应用程序作为 IIS 应用程序

    我正在将一些应用程序从 ASP NET 5 beta7 迁移到 RC1 使用 HTTPPlatformHandler 我可以将这些 ASP NET 5 RC1 应用程序作为 IIS 站点的根运行 但它们不会作为站点的子目录 右键单击 添加应
  • 如果在 R 的另一个列表中找到 id,则删除数据框的行

    我有一个数据框final其中每个观察值在称为的列中都有一个 idfinal workerId如果在另一个名为的列表中找到这些行的 ID 我想删除该数据框的一些行omit这是我尝试过的 final lt read csv the data c
  • 将嵌套 Foreach 转换为 Linq

    我正在尝试使用 LINQ 重写以下内容 foreach WMCommon Services StakeOut assembly ass in assemblies foreach var agg in aggregate if agg ca
  • 延迟Google Cloud功能

    我有一个与 Google Firebase 配对的 swift iPhone 应用程序 在应用程序中 用户将完成一个操作 按下按钮 此时 我想安排一个 Google Firebase 函数在用户操作后 45 分钟运行 但是 我希望当 iPh
  • JS - 不带前导零或仅零的数字正则表达式

    我正在尝试编写货币的正则表达式 没有逗号或 符号或句点 只有整数 但我遇到了困难 我需要一个数字 作为字符串 来匹配要验证的模式 以下是我需要的 1 数字可以是单个零2 数字不能有前导零 有效输入 0 12345 1230 无效的 00 0
  • 如果路径包含“#”,System.Uri 无法给出正确的 AbsolutePath 和 LocalPath

    我有 C 代码试图获取LocalPath对于使用以下代码行的执行程序集 Uri uri new Uri Assembly GetExecutingAssembly CodeBase LocalPath 这段代码对于所有各种路径都表现良好 它
  • jcombobox 作为单元格编辑器 java.awt.IllegalComponentStateException:组件必须显示在屏幕上才能确定其位置

    我使用自定义 JComboBox 作为 JTable 中的单元格编辑器 当用户使用键盘控件进入单元格时 它会尝试打开弹出窗口 这会导致以下错误 java awt IllegalComponentStateException componen