JComboBox 获取箭头部分或者如何为箭头部分添加监听事件?

陈志凯 2012-04-13 02:09:51
如题:当我把鼠标指针移到该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事件没有涉及鼠标移动的事件。
哪位朋友、大侠能帮忙看下?
鞠躬了,谢谢!
...全文
185 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈志凯 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
Java code

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.me……
[/Quote]
虽然有些啰嗦,再一次感谢你!
sunyiz 2012-04-13
  • 打赏
  • 举报
回复
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();
}

}
陈志凯 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
有个办法,不过比较麻烦
楼主看一下 BasicComboBoxUI 类的
public void configureArrowButton() 方法
这个里面就是给右边那个按钮注册事件的地方

你需要做的就是,重写一个 BasicComboBoxUI 或 MetalComboBoxUI
然后重写里面的 configureArrowButton 方法
在这里,自己再给 arrowBut……
[/Quote]

请问,有没具体的代码可参考?思路肯定是正解,谢谢
sunyiz 2012-04-13
  • 打赏
  • 举报
回复
有个办法,不过比较麻烦
楼主看一下 BasicComboBoxUI 类的
public void configureArrowButton() 方法
这个里面就是给右边那个按钮注册事件的地方

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

另外别忘了在
public void unconfigureArrowButton() 方法里注销这个监听器
陈志凯 2012-04-13
  • 打赏
  • 举报
回复
顶自己一个先

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧