JList MouseMoved和MousePressed

时间:2011-12-04 03:42:50

标签: java swing mouseevent mouse jlist

我扩展了JList以提供两个独立的功能,即项目的toolTipText和右键单击选项。两者都是分开工作,但是当我尝试一起使用时,MouseMoved事件无法识别?以下是我的新听众方法的内容。我应该如何谈判这些不同的事件?

public class JListTT extends javax.swing.JList {
    public JListTT() {
        super();
       addMouseListener(new ttListener());
...
   class ttListener extends MouseAdapter {
        public void mouseMoved(MouseEvent e) {
             String nodeID = bldItemNodeID();
             theList.setToolTipText(nodeID);
            }
        public void mousePressed(MouseEvent ev)  {check(ev); }
        public void mouseReleased(MouseEvent ev) {check(ev); }
        public void mouseClicked(MouseEvent ev)  {check(ev); }
        public void check(MouseEvent ev) {
            if (ev.isPopupTrigger()) { 
                theList.setSelectedIndex(theList.locationToIndex(ev.getPoint())); 
                menu.show(theList, ev.getX(), ev.getY()); 
            }
        }
    }

4 个答案:

答案 0 :(得分:4)

您将ttListener对象添加为MouseListener,但我没有看到您将ttListener对象添加为MouseMotionListener。例如:

ttListener myMouseadapter = new ttListener();
addMouseListener(myMouseadapter);
addMouseMotionListener(myMouseadapter);

答案 1 :(得分:2)

我自己没有对此进行测试,但是查看JList的javadoc工具提示功能是开箱即用的。 JList#getTooltipText的javadoc明确指出

  

重写JComponent的getToolTipText方法以允许   如果渲染器有文本设置,则使用它的提示。

因此,如果您的ListCellRendererComponent方法中返回getListCellRendererComponent JList,{{1}}将显示{{1}},而不需要监听器。

答案 2 :(得分:1)

作为自定义鼠标/ / motionListener,不一定需要低级方法:

  • 关于每个单元格的工具提示,请参阅@Robin的回答
  • 关于上下文菜单,JComonent有一个属性componentPopupMenu:使用它将自动处理在键盘上快捷打开菜单

“不一定”,因为您似乎依赖于右键单击选中的单元格。如果是这样,你仍然需要一个MouseListener来触发选择(经过长达十年的辩论,Swing没有 - 这在当前的原生应用程序中似乎不常见;-)

答案 3 :(得分:0)

您可以使用 mouseDragged

来实现它
YourClass extends JPanel implements MouseListener{
    ......

    @Override
    public void mouseDragged(MouseEvent e) {
        //code go here

    }
}