日期:2014-05-20  浏览次数:20652 次

JComboBox 获取箭头部分或者如何为箭头部分添加监听事件?
如题:当我把鼠标指针移到该JComboBox的箭头部分时,如何捕获鼠标指针离开了该JComboBox的整个组件(或者只是箭头部分)?
  我尝试为该组件添加如下事件:
 
Java code
 MouseListener mouseListener=new MouseListener(){

            @Override
            public void mouseClicked(MouseEvent arg0) {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub
                CalendarHack.this.removeAll();
                CalendarHack.this.repaint();
                setUpButton(CalendarHack.this.frame);
                setDate_Control();
                CalendarHack.this.updateUI();
            }

            @Override
            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub
                
            }
            
        };

  但其只能捕获鼠标指针离开的左边部分,对于右边部分的箭头组件无法捕获。
  另外,PopupMenuListener事件没有涉及鼠标移动的事件。
  哪位朋友、大侠能帮忙看下?
  鞠躬了,谢谢!

------解决方案--------------------
有个办法,不过比较麻烦
楼主看一下 BasicComboBoxUI 类的
public void configureArrowButton() 方法
这个里面就是给右边那个按钮注册事件的地方

你需要做的就是,重写一个 BasicComboBoxUI 或 MetalComboBoxUI
然后重写里面的 configureArrowButton 方法
在这里,自己再给 arrowButton 注册一个监听器

另外别忘了在 
public void unconfigureArrowButton() 方法里注销这个监听器