由于ComboBox需要定制,于是根据已有的的例子,自己重写了一下该控件的交互和样式。主要修改的地方有两点:(1)当鼠标离开下拉区域时,下拉列表将自动收回。不过可能实现的效果不是很好,当鼠标滑动速度较快时列表收回的动作并没有被触发。(2)调整了高亮效果。当鼠标划过和被选中时的状态有所区分,主要响应了三个槽函数: onClick(),onEnter(),onExited()。
在修改上述的第一点时,遇到了一点问题: 父组件和子组件的MouseArea,只能有其中一个会响应鼠标的事件。也就是当Mouse事件被其中一个组件捕获了,那么该事件就不会再传递下去,其他组件就捕捉不到这个事件了。所以当子组件MouseArea有效时(用作高亮效果的展示 ),父组件MouseArea被屏蔽了(检测不到鼠标是否离开了下拉区域)。没有想到好的解决方法,就用了一种有点取巧但又很简单的方法: 子组件被包含在父组件中,并且父组件的尺寸比子组件大一些;当鼠标坐标移出子组件时,父控件MouseArea就有效了。
代码见这里:
http://www.rritw.com/a/JAVAbiancheng/ANT/20130109/245259.html