java - 如何获取 JComboBox 项目的屏幕坐标

标签 java swing awt

我正在尝试获取 JComboBox 中项目的屏幕坐标 (x,y)。最好我想要整个边界框(x,y,宽度,高度),但主要是位置。

此信息有多种用途。单击自动化,检查列表可能遮挡的内容(或可能遮挡列表的内容),测试与显示边缘或其他可能不需要的位置的接近程度等。

我只需使用 Component.getLocationOnScreen 即可获取普通组件 (Component) 的坐标。有时我想要中心点,为此我取 getLocationOnScreen 的 x/y,然后添加 getWidthgetHeight 的一半。

如何对组合框下下拉项的视觉空间执行类似的操作?

JComboBox dropped down

例如,在上图中,我想获取“Test 1”(在下拉列表中,而不是在编辑器中)或“Test 2”或“Test 3”的 x,y 坐标.

也就是说,如果“测试 1”位于 (10,10),“测试 2”位于 (10,20),“测试 3”位于 (10,30),并且每个测试的 (width,height) 为(30,10),我想要 f(0) = (10,10), f(1) = (10,20), f(2 )=(10,30)。或者,如果我们也获得了完整边界,则 f(2) = (10,20,30,10),但同样,完整边界对于至少获取位置而言是次要的。

最佳答案

How can I do something similar for the visual real estate of the drop-down items under the combo box?

您可以访问用于显示组合框项目的 JList。

JComboBox comboBox = new JComboBox(...);
BasicComboPopup popup = (BasicComboPopup)comboBox.getAccessibleContext().getAccessibleChild(0);
JList list = popup.getList();
Rectangle bounds = list.getCellBounds(...);
// bounds will be relative to the bottom of the combo box.

我只在监听器中使用了上述逻辑,因此我不确定是否在首次创建组合框时或首次显示弹出窗口时创建弹出窗口。

关于java - 如何获取 JComboBox 项目的屏幕坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43895048/

相关文章:

java - BpmnError 在 activiti 中不起作用

java - 将文本附加到 TextView 数据类型

java - JTable 中第一个不必要的空行。如何去除它?

java - 删除/替换数组中的对象

java - Android ListView 中的 Twitter4J 时间线

java - 使用方法在数组中搜索唯一名称

java - 我怎样才能 "erase"我在 Java Graphics2D Canvas 上绘制的东西而不删除它后面的东西?

java - 冗长的 MouseListener 实现值得开销吗?

java - 如何向 JTabbedPane 中的现有项目添加额外项目?

Java AWT 文本生成工件