如题:当我把鼠标指针移到该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事件没有涉及鼠标移动的事件。
哪位朋友、大侠能帮忙看下?
鞠躬了,谢谢!
我尝试为该组件添加如下事件:
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() 方法里注销这个监听器
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();
}}