Java 如何在JScrollPane中添加双击功能?

Java 如何在JScrollPane中添加双击功能?,java,swing,jscrollpane,double-click,mouselistener,Java,Swing,Jscrollpane,Double Click,Mouselistener,我正在使用JScrollPane并通过模型填充它。现在我想添加双击侦听器 在这里我是如何尝试 PlayListScrollPane.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent mouseEvent) { JList theList = (JList) mouseEvent.getSource

我正在使用JScrollPane并通过
模型
填充它。现在我想添加双击侦听器
在这里我是如何尝试

  PlayListScrollPane.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent mouseEvent) {
                JList theList = (JList) mouseEvent.getSource();
                if (mouseEvent.getClickCount() == 2) {
                    int index = theList.locationToIndex(mouseEvent.getPoint());
                    if (index >= 0) {
                        Object o = theList.getModel().getElementAt(index);
                        System.out.println("Double-clicked on: " + o.toString());
                    }
                }
            }
        });
playlicScrollPane
JScrollPane
。。。 上述方法永远不会激发。。。
谢谢。

您的问题是,您的clickCount应该是类中的变量,而不是侦听器中的变量。就像:

private clicksCount = 0;
如果列表也被实例化,那么您可以访问它。然后:

PlayListScrollPane.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent mouseEvent) {
        clicksCount++;

        if (clicksCount == 2) { //Or clicksCount%2==0
            int index = myJList.locationToIndex(mouseEvent.getPoint());
            if (index >= 0) {
                Object o = theList.getModel().getElementAt(index);
                System.out.println("Double-clicked on: " + o.toString());
            }
            clicksCount=0;//If you use clickCounts%2==0 you don't need this line
        }
    }
});

您可能应该将侦听器添加到视口,而不是滚动窗格

试试这个:

PlayListScrollPane.getViewport().addMouseListener(new MouseAdapter() { ...
而不是:

PlayListScrollPane.addMouseListener(new MouseAdapter() { ... 
JList theList=(JList)mouseEvent.getSource()

滚动窗格中似乎显示了一个JList。JList使用鼠标侦听器来处理鼠标事件。如果要双击JList进行某些处理,请将鼠标侦听器添加到JList


实际上,看看有没有更好的方法。它将允许您创建一个操作,然后通过双击或Enter键支持调用该操作,因为设计良好的GUI应该通过鼠标或键盘工作。

好的。

我修复了它,实际上我在错误的类中添加了
MouseListener
。我只是遵循这一点,实现了我想要的