2011-09-09 65 views
24

我有一个JList内的单词列表。每次我将鼠标光标指向一个单词时,我都希望光标变成手形光标。现在我的问题是如何做到这一点?如何在java中更改鼠标光标?

有人可以帮我解决这个问题吗?

回答

30

在您的JList上使用MouseMotionListener来检测鼠标何时进入,然后调用setCursor将其转换为HAND_CURSOR

示例代码:

final JList list = new JList(new String[] {"a","b","c"}); 
list.addMouseMotionListener(new MouseMotionListener() { 
    @Override 
    public void mouseMoved(MouseEvent e) { 
     final int x = e.getX(); 
     final int y = e.getY(); 
     // only display a hand if the cursor is over the items 
     final Rectangle cellBounds = list.getCellBounds(0, list.getModel().getSize() - 1); 
     if (cellBounds != null && cellBounds.contains(x, y)) { 
      list.setCursor(new Cursor(Cursor.HAND_CURSOR)); 
     } else { 
      list.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 
     } 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
    } 
}); 
+0

如果我想光标的变化是,当我指出这个词,没有在列表中出现呢?可能吗? – sack

+1

@Mikel我已经更新了我的答案,只有当光标在列表中的项目上时才显示一个手。 – dogbane

+0

是的,但有一点问题。当我将鼠标指向单词旁边时,它仍然出现一个手形光标。当我指向鼠标光标时,我只想让这个词出现一个手形光标。 – sack