如题:当我把鼠标指针移到该JComboBox的箭头部分时,如何捕获鼠标指针离开了该JComboBox的整个组件(或者只是箭头部分)?
  我尝试为该组件添加如下事件:
   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事件没有涉及鼠标移动的事件。
  哪位朋友、大侠能帮忙看下?
  鞠躬了,谢谢!

解决方案 »

  1.   

    有个办法,不过比较麻烦
    楼主看一下 BasicComboBoxUI 类的
    public void configureArrowButton() 方法
    这个里面就是给右边那个按钮注册事件的地方你需要做的就是,重写一个 BasicComboBoxUI 或 MetalComboBoxUI
    然后重写里面的 configureArrowButton 方法
    在这里,自己再给 arrowButton 注册一个监听器另外别忘了在 
    public void unconfigureArrowButton() 方法里注销这个监听器
      

  2.   

    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.plaf.metal.MetalComboBoxUI;public class JTryComboBox extends JFrame {

    private JPanel mainPane = new JPanel();
    private JComboBox comboBox = new JComboBox();

    public JTryComboBox() {
    initialize();
    }

    private void initialize() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 300);
    setLocationRelativeTo(null);
    comboBox.setUI(new MyComboBoxUI());
    mainPane.add(comboBox);
    setContentPane(mainPane);
    setVisible(true);
    }

    class MyComboBoxUI extends MetalComboBoxUI {

    private MouseAdapter mouseAdapter = new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent e) {
    System.out.println("Enter arrow button");
    }

    @Override
    public void mouseExited(MouseEvent e) {
    System.out.println("Exit arrow button");
    }
    };

    @Override
    public void configureArrowButton() {
    super.configureArrowButton();
    arrowButton.addMouseListener(mouseAdapter);
    }

    @Override
    public void unconfigureArrowButton() {
    super.unconfigureArrowButton();
    arrowButton.removeMouseListener(mouseAdapter);
    }

    }

    public static void main(String... args) {
    new JTryComboBox();
    }}