程序的流程是这样的:将第一组按钮 ( leftButtonArea
) 中的图像拖动到第二组按钮 ( rightButtonArea
)。
每个图像都有一个唯一的名称,通过setName()
. 被拖动的图像的名称将与它被拖动到的按钮的名称进行比较。
如果名称匹配,我希望禁用该特定按钮对任何悬停事件作出反应。
.setHoverEnabled(false)
不工作=/
关于禁用事件侦听器的类似 SO 线程,但似乎使用 a 的解决方案glass pane
适用于整个组件?
关联
编辑:
不知何故这可行,但我不确定这种方法有什么副作用
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)
{
}
}
});
}