【问题标题】:disable mouseEvent for a specific JButton in a group of JButtons为一组 JButton 中的特定 JButton 禁用 mouseEvent
【发布时间】:2013-01-10 20:49:26
【问题描述】:

程序的流程是这样的:将第一组按钮 (leftButtonArea) 中的图像拖到第二组按钮 (rightButtonArea)。

每个图像都有一个唯一的名称,通过 setName()。被拖动的图像名称将与它被拖动到的按钮的名称进行比较。

如果名称匹配,我希望禁用该特定按钮对任何悬停事件作出反应。

.setHoverEnabled(false) 不起作用 =/

关于禁用事件侦听器的类似 SO 线程,但似乎使用 glass pane 的解决方案适用于整个组件? link

编辑: 不知何故这有效,但我不确定这种方法有什么副作用 source.removeMouseListener(source.getMouseListeners()[1]);

编辑2: 发现了一些有趣的东西。这可能是禁用按钮仍然对 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) 
    {

    }

    }       

    });
}

【问题讨论】:

  • 你试过setEnabled(false)吗?
  • source.setEnabled(false); 有效,但图像图标仍将通过 mouseEvent 删除。
  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 在消除悬停效果方面你想做什么具体的事情。 ?例如,鼠标移到该按钮上,悬停效果为假,然后它应该停止更改其边界线(就像在正常情况下鼠标移到按钮上时发生的那样)..或类似的东西?
  • 我不希望从按钮中删除ImageIcon

标签: java swing mouseevent jbutton event-listener


【解决方案1】:

【讨论】:

    【解决方案2】:

    试试

    button.setRolloverEnabled(false);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多