tôi đã không kiểm tra này, nhưng những điều cơ bản sẽ là ...
- Sử dụng
JList#locationToIndex(Point)
để có được những chỉ số của phần tử tại điểm nhất định.
- Lấy "phần tử" tại chỉ mục được chỉ định (sử dụng
JList#getModel#getElementAt(int)
).
- Nhận
ListCellRenderer
sử dụng JList#getCellRenderer
.
- Render nguyên tố này và nhận được nó
Component
đại diện
- Đặt giới hạn của renderer để giới hạn tế bào cần
- Chuyển đổi bản gốc
Point
đến Component
s bối cảnh
- Sử dụng
getComponentAt
trên renderer ...
Có thể, một cái gì đó như ...
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);
Đối với một 'JList', hãy thêm ['ListSelectionListener'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/event/ListSelectionListener.html). Để được trợ giúp tốt hơn sớm hơn, hãy đăng một [SSCCE] (http://sscce.org/). –
'JList' không chứa bất kỳ thành phần nào. Nó sử dụng 'ListCellRenderer' để vẽ một" con dấu cao su "của thành phần vào danh sách. Có nghĩa là, mỗi phần tử trong danh sách được trả về bằng cách sử dụng cùng một/duy nhất 'ListCellRenderer' – MadProgrammer