如何通过单击位置从JList获取组件?
我有自己的列表单元格渲染器,我插入一些面板和标签.
现在我想得到,例如用户点击的标签.
我尝试了方法list.getComponentAt(evt.getPoint());但它只返回整个JList.
解决方法
我没有测试过这个,但基础知识是……
>使用JList#locationToIndex(Point)获取元素的索引
给定的点.
>在指定的索引处获取“元素”(使用
JList的#getModel#getElementAt(INT)).
>使用JList#getCellRenderer获取ListCellRenderer.
>渲染元素并获取它的Component表示
>将渲染器的边界设置为所需的单元格边界
>将原始Point转换为Components上下文
>在渲染器上使用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);