2013-09-26 136 views
1

在下面的代码中,点击标签应该隐藏它,但该方法永远不会被调用!我在这里错过了什么?为什么MousePressed永远不会被调用?

package com.hermaryopto.lib.output.message; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Cursor; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
public class CDisplayMessage { 
    JLabel label; 
    public CDisplayMessage(Container parent, int top, int left, int width, int height, int fontSize){ 
     label = new JLabel(); 
     label.setFont(new Font("Arial", Font.PLAIN, fontSize)); 
     label.setOpaque(true); 
     label.setBackground(Color.ORANGE); 
     label.setCursor(new Cursor(Cursor.HAND_CURSOR)); 
     label.setBounds(top, left, width, height); 
     int w = width; 
     int h = height; 
     label.setMinimumSize(new Dimension(w,h)); 
     label.setPreferredSize(new Dimension(w,h)); 
     label.setMaximumSize(new Dimension(w,h)); 

     parent.add(label); 
//--------- This mouse pressed never gets called why? 
     label.addMouseListener(new MouseAdapter(){ 
     public void MousePressed(MouseEvent e){ 
      label.setVisible(false);  
     } 
     }); 

    } 

    public void message(String sMessage, final Color color){ 
    label.setText(sMessage); 
    } 

    public void repaint(){ 
     label.repaint(); 
    } 

    public static void main(String [] args){ 
     JFrame frame = new JFrame(); 
     CDisplayMessage cp = new CDisplayMessage(frame, 10,10, 100,100,22); 
     cp.message("click here to hide this text", Color.red); 
     frame.setVisible(true); 
     frame.setSize(new Dimension(200,200)); 

    } 
} 

回答

3

您既不重写也不重载鼠标适配器中正确的方法。

MousePlant不存在于MouseAdapter中,因此是您的MouseAdapter实现的自定义方法,它永远不会被调用。 mousePressed是您期望调用的方法。在eclipse IDE中,您可以使用助手(我认为它是ctrl +空格)来查看您可以替代匿名类的所有方法。

替换:

label.addMouseListener(new MouseAdapter() { 
    public void MousePressed(MouseEvent e) { 
    label.setVisible(false); 
    } 
}); 

label.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent e) { 
    label.setVisible(false); 
    }; 
}); 

...........

UPDATE:

现在,如果你真的想打电话给MousePressed(因为这是你的问题,傻我!)

你可以使用它作为这样的:

// --------- This mouse pressed never gets called why? 
label.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent e) { 
    MousePressed(e) 
    }; 

    public void MousePressed(MouseEvent e) { 
    label.setVisible(false); 
    } 
}); 

OR

MouseAdapter myMouseAdapter = new MouseAdapter() { 
     public void MousePressed(MouseEvent e) { 
     label.setVisible(false); 
     } 
    }; 
label.addMouseListener(myMouseAdapter); 
myMouseAdapter.MousePressed(mouseEventInstance); 
+0

你错过了你的第二个到最后一个例子分号 - '的mousePressed(E)'应该是'的mousePressed(E); '。不过,+1教我一个新的Eclipse技巧:) – StormeHawke

相关问题