如何获取JComboBox项的屏幕坐标

时间:2017-05-10 14:13:25

标签: java swing awt

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

此信息有很多用途。单击自动化,检查列表可能隐藏的内容(或可能使列表模糊的内容),测试显示边缘附近或其他可能不合需要的位置等。

我只是使用Component来获取正常组件的坐标(Component.getLocationOnScreen)。有时我想要中心点,我将getLocationOnScreen的x / y加上getWidthgetHeight的一半。

如何为组合框下方的下拉项目的视觉空间做类似的事情?

JComboBox dropped down

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

即,如果“测试1”在(10,10),“测试2”在(10,20),“测试3”在(10,30),并且每个都有(宽度,高度) (30,10),我想要f(0) = (10,10)f(1) = (10,20)f(2) = (10,30)。或者,如果我们确实获得了完整的边界,那么f(2) = (10,20,30,10),但是再次,完整边界是获得至少位置的次要因素。

1 个答案:

答案 0 :(得分:1)

  

如何为组合框下方的下拉项目的视觉空间做类似的事情?

您可以访问用于显示组合框项目的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.

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

相关问题