如何通过点击位置从JList
获取组件?
我有自己的列表单元格渲染器,我插入了一些面板和标签。 现在我想得到,例如用户点击的标签。
我尝试了list.getComponentAt(evt.getPoint());
方法,但它只返回整个JList
。
答案 0 :(得分:18)
我没有测试过这个,但基础知识是...
JList#locationToIndex(Point)
获取元素的索引
给定点。JList#getModel#getElementAt(int)
)。ListCellRenderer
JList#getCellRenderer
Component
表示Point
转换为Component
上下文getComponentAt
... 可能就像......
int index = list.locationToIndex(p);
Object value = list.getModel().getElementAt(int);
Component comp = listCellRenderer.getListCellRendererComponent(list, value, index, true, true);
comp.setBounds(list.getCellBounds(index, index));
Point contextPoint = SwingUtilities.convertPoint(list, p, comp);
Component child = comp.getComponentAt(contextPoint);
答案 1 :(得分:3)
要检查用户是否确实单击了您必须执行的单元格:
int index = list.locationToIndex(p);
if (index > -1 && list.getCellBounds(index, index).contains(p)){
// rest of MadProgrammer solution
...
}