1

以下のコードでは、ラベルをクリックすると非表示になるはずですが、メソッドが呼び出されることはありません! ここで何が欠けていますか?

    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));

   }
}
4

1 に答える 1

3

マウス アダプタの正しいメソッドをオーバーライドもオーバーロードもしていません。

MousePressed は MouseAdapter には存在しないため、呼び出されることのない MouseAdapter 実装のカスタム メソッドです。mousePressed は、呼び出すメソッドです。Eclipse IDE では、ヘルパー (ctrl+space だと思います) を使用して、匿名クラスに対してオーバーライドできるすべてのメソッドを表示できます。

交換:

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);
  };
});

…………

アップデート:

さて、あなたが本当に 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);
  }
});

また

MouseAdapter myMouseAdapter = new MouseAdapter() {
      public void MousePressed(MouseEvent e) {
        label.setVisible(false);
      }
    };
label.addMouseListener(myMouseAdapter);
myMouseAdapter.MousePressed(mouseEventInstance);
于 2013-09-26T22:55:33.043 に答える