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

时间:2013-12-20 10:54:28

标签: java swing jscrollpane double-click mouselistener

我正在使用JScrollPane并通过Model填充它。现在我要添加Double CLick Listener 我在这里尝试...

  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());
                    }
                }
            }
        });

PlayListScrollPaneJScrollPane ... 以上方法永远不会爆发...... 感谢。

4 个答案:

答案 0 :(得分:0)

您的问题是,您的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
        }
    }
});

答案 1 :(得分:0)

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

试试这个:

PlayListScrollPane.getViewport().addMouseListener(new MouseAdapter() { ...

而不是:

PlayListScrollPane.addMouseListener(new MouseAdapter() { ... 

答案 2 :(得分:0)

  

JList theList =(JList)mouseEvent.getSource();

看起来你在滚动窗格中显示了一个JList。 JList使用MouseListener,因此它将处理MouseEvents。如果要通过双击对JList进行一些处理,则将MouseListener添加到JList。

实际上,请查看List Action以获得更好的方法。它允许您创建一个Action,然后使用双击或Enter键支持调用Action,因为精心设计的GUI应该可以通过鼠标或键盘工作。

答案 3 :(得分:0)

好的..我修好了,实际上我在错误的班级中添加了MouseListener。我只是按照这个tut来实现我想要的。