繁体   English   中英

获取JScrollPane中包含的JList

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM