我有一个带有6个JScrollPane的大面板,每个JScrollPane都包含一个JList。
我正在尝试将MouseListener事件添加到面板上的每个JList中,我如何访问它?为了更好地理解,这是我的代码:
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);
关于java - 获取JScrollPane中包含的JList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22003328/