[英]get JList contained in a JScrollPane
我有一个带有6个JScrollPane的大面板,每个JScrollPane都包含一个JList。 我正在尝试向面板上的每个JList添加一个MouseListener事件,我如何访问它? 为了更好地理解,这是我的代码:
private void agregarDobleClick() {
for (Component c : jPanel1.getComponents()) {
c.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent evt) {
JList list = (JList) evt.getSource();
if (evt.getClickCount() == 2) {
Rectangle r = list.getCellBounds(0, list.getLastVisibleIndex());
if (r != null && r.contains(evt.getPoint())) {
modCitaPOPUP modcita = new modCitaPOPUP((Cita) list.getSelectedValue());
modcita.setVisible(true);
}
}
}
});
}
}
当我运行它时,它将mouseListener添加到JScrollPane中,并且当我双击JList项时,什么都没有发生,因为mouseListener事件不存在。 谢谢。
根据您的描述,它看起来像是将MouseListener
添加到JScrollPane
而不是JList
。
简单的解决方案是制作一个特殊的MouseListener
...
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
并在创建它时将其应用于每个JList
...
JList list = new JList();
list.addMouseListener(new ListMouseListener(list));
现在,如果您担心它们可能效率低下或占用大量内存(根据您的示例,不是),则可以创建一个通用的MouseListener
,它使用事件源来确定触发它的人。 。
public class ListMouseListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent evt) {
Object source = evt.getSource();
if (source instanceof JList) {
JList list = (JList)source;
}
}
}
然后创建一个实例并将其应用于JList
所有实例...
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.