程序流程如下:第一组按钮(leftButtonArea
)中的图像被拖动到第二组按钮(rightButtonArea
)。
每张图片都有一个唯一的名称setName()
。拖动的图像名称将与拖动它的按钮名称进行比较。
如果名称匹配,我希望禁用该特定按钮以响应任何悬停事件。
.setHoverEnabled(false)
不起作用= /
关于禁用事件监听器的类似SO线程,但似乎使用glass pane
的解决方案是针对整个组件的吗?
link
修改
不知何故,这是有效的,但我不确定这种方法有任何副作用
source.removeMouseListener(source.getMouseListeners()[1]);
EDIT2: 找到了一些有趣的东西..这可能是禁用按钮仍然对mouseEvents做出反应的原因。
“低级别:组件,容器,焦点,键,鼠标,颜料,窗口
语义:动作,调整,项目,文本
禁用任何组件只会影响语义事件。这是因为它们直接由组件本身处理,组件本身知道它是否被启用。 禁用会影响低级别事件。如果您在禁用标签时停下来想一想,它仍然可见。如果是那时油漆事件一定发生了。低级别事件将始终发生,如果已启用,则由处理程序查询组件。“
// 1st set of 4 buttons
for(int a=0; a<4; a++){
leftButtonArea[a] = new JleftButtonArea(new ImageIcon(image));
TransferHandler transfer = new TransferHandler("icon");
leftButtonArea[a].setTransferHandler(transfer);
leftButtonArea[a].addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
JleftButtonArea leftButtonArea = (JleftButtonArea)e.getSource();
TransferHandler handle = leftButtonArea.getTransferHandler();
handle.exportAsDrag(leftButtonArea, e, TransferHandler.COPY);
// get unique name for the image that is dragged
// to rightButtonArea
name1 = e.getComponent().getName();
}
});
}
// creates 2nd set of 4 buttons
for(int b=0; b<4; b++){
rightleftButtonAreaArea[b] = new JleftButtonArea();
// <---- creates unique name for each leftButtonArea ----->
cc2 += 1;
id2+="a"+cc2;
rightleftButtonAreaArea[b].setName(id2);
// <---- creates unique name for each leftButtonArea ----->
TransferHandler transfer1 = new TransferHandler("icon");
rightleftButtonAreaArea[b].setTransferHandler(transfer1);
rightleftButtonAreaArea[b].addMouseListener(new MouseAdapter(){
@Override
public void mouseExited(MouseEvent me){
JleftButtonArea source = (JleftButtonArea)me.getSource();
try{
// compare unique name of image and the button in rightButtonArea
// if they are the same, disable hover for the button
if( name1.equals(source.getName())){
// this doesn't work
source.getName().setHoverEnabled(false);
// Somehow this works, but I am not sure of any side effects from this
source.removeMouseListener(source.getMouseListeners()[1]);
}
else{
source.setIcon(null);
}
}
catch (NullPointerException e)
{
}
}
});
}
答案 0 :(得分:4)
答案 1 :(得分:0)
尝试
button.setRolloverEnabled(假);