1.
就是有2个按钮。
前提:例  :1,2标签JLabel;
                      2个按钮都设置了2个事件,即,鼠标经过,鼠标单击,鼠标右键按住不放  ,这3个状态,分别会激活不同颜色。
然后下面想实现的功能:
当为右键不放点着1号标签时,经过2号标签(按正常情况,按住鼠标左键经过会触发鼠标经过状态。)但现在想这个状态不见。
但是当没有鼠标右键按住不放某个按钮时,这个,鼠标经过状态,还是在的。
如图:
当按住6时,鼠标经过5号标签,  5号会变色(触发,鼠标经过事件(但是这个事件我并不想取消,只是想在按住其他键时,不触发这个事件))。但想要的结果是 左键按住6时,鼠标经过5号标签。标签不变色,这个应该怎么写。智商捉急中。我的表述可能有点问题。。希望见谅部分代码如下。
我为每个标签都写了一个类
标签事件:public class SCal {
public JLabel  
Show=new JLabel("");
 
public class MouseAdp implements MouseListener{ @Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

} @Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
int r=212;
int g=109;
int b=98;
Color Co=new Color(r,g,b);
Show.setOpaque(true);                 //有了这句背景色才有用
Show.setBackground(Co );

} @Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
int r=204;
int g=57;
int b=41;
Color Co=new Color(r,g,b);
Show.setOpaque(true);                 //有了这句背景色才有用
Show.setBackground(Co );
} @Override
public void mouseEntered(MouseEvent e ) {
/**鼠标移到组件上方法时事件处理方法.**/
int r=204;
int g=57;
int b=41;
Color Co=new Color(r,g,b);
Show.setOpaque(true);                 //有了这句背景色才有用
Show.setBackground(Co );
} @Override
public void mouseExited(MouseEvent e ) {
    /**鼠标移开组件时事件处理方法.**/
int r=230;
int g=230;
int b=230;
Color Co=new Color(r,g,b);
Show.setOpaque(true);
Show.setBackground(Co );
}

 

}
 
}添加标签:public class GCal extends JFrame  {
SCal sc=new SCal();
sc.Show =new JLabel("=",JLabel.CENTER); 
int r=230;
 int g=230;
 int b=230;
 Color co=new Color(r,g,b);
sc.Show.setBounds(240,491,80,60);
 sc.Show.setFont(new java.awt.Font("Dialog",   1,   21));
 sc.Show.setOpaque(true);    
 sc.Show.setBackground(co);
 /**
* 事件
 */   
sc.Show.addMouseListener(sc.new MouseAdp());
 /**
* 添加
 */
add(sc.Show);

解决方案 »

  1.   

    在每一个按键上都加一个状态变量表示这个键是否被激活,如果其中一个键触发事件,事件监听器就把其他所有的键设置为未激活状态。在未激活状态下,监听器直接返回
    public void mouseOver(MouseEvent mEvt) {
      if (!enabled) {
        return;
      }
      // rest of mouseOver goes here
    }
      

  2.   

    最好不要让你的GUI 类实现监听器接口,因为你让这个GUI类的任务太繁重了。
      

  3.   

    你为什么要用到 mousepressed event? 仅用click不就可以了吗?
      

  4.   

    好吧。。关于mousepressed event  我一开始没明白就想着效果一样就用了然后。为在GUI类貌似没有实现接口啊。嗯。。我接口都写在每个标签类里面。然后GUI实现标签的。嗯。嗯。。如果理解错了。。请见谅。。新手中,,,
      

  5.   


    public void mouseExited(MouseEvent event) // Or any other mouse event handler...
    {
        int buttonsDownMask = MouseEvent.BUTTON1_DOWN_MASK 
                | MouseEvent.BUTTON2_DOWN_MASK 
                | MouseEvent.BUTTON3_DOWN_MASK; // Or whichever buttons you care about...
        if ( (event.getModifiersEx() & buttonsDownMask) != 0 )
            System.out.println("Hey! Some button is pressed!");
    }