[英]How to add Double-click capability in JScrollPane?
我正在使用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());
}
}
}
});
PlayListScrollPane
是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使用MouseListener,因此它将处理MouseEvent。 如果要双击JList进行一些处理,则将MouseListener添加到JList。
实际检查一下List Action以获得更好的方法。 它将允许您创建一个动作,然后通过双击或Enter键来支持该动作的调用,因为精心设计的GUI应该可以通过鼠标或键盘来工作。
OK ..我已修复它,实际上我在错误的类中添加了MouseListener
。 我只是遵循了这个练习 ,就实现了我想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.