MouseListener Problem

ebfrb

Grünschnabel
Hallo Leute

Ich bin neu hier und hab gleich mal ne erste frage. Ich muss in einem Vortrag den MouseListener vorstellen und diesen anhand eines Beispiels erklären. Ich habe jetzt ein Programm geschrieben, dass alle 5 Aktionen darstellt:


Code:
import java.awt.*;
import java.awt.event.*;
/*import java.io.*;*/

public class Anwendung extends Frame{

boolean hold;

   /**
    *
    */
   private static final long serialVersionUID = 1L;
   
   void initListener()
   {
      this.addWindowListener(new WindowAdapter()
      {
         public void windowClosing(WindowEvent we)
         {
            System.exit(0);
         }
      });
      
      this.addMouseListener(new MouseAdapter()
      {
         public void mouseClicked(MouseEvent e)
         {
            
            Label lblKlick = new Label("Folge: Sie haben geklickt");
            add(lblKlick);
            lblKlick.setFont(new Font("Arial",Font.ITALIC,30));
            lblKlick.setBounds(100,300,500,40);
         }
      
         public void mousePressed (MouseEvent e)
         {
               Label lblHold = new Label("Sie halten die Maus gedrückt");
               add(lblHold);
               lblHold.setFont(new Font("Arial",Font.BOLD,30));
               lblHold.setBounds(100,100,500,40);
                        
         }
      
         public void mouseReleased (MouseEvent e)
         {
            Label lblRelease = new Label("Sie haben die Maus losgelassen");
            add(lblRelease);
            lblRelease.setFont(new Font("Arial",Font.PLAIN,30));
            lblRelease.setBounds(100,200,500,40);
         }
      
         public void mouseEntered (MouseEvent e)
         {
            Label lblRelease = new Label("Die Maus befindet sich im Programm");
            add(lblRelease);
            lblRelease.setFont(new Font("Arial",Font.PLAIN,30));
            lblRelease.setBounds(100,400,500,40);
         }
         
         public void mouseExited (MouseEvent e)
         {
            Label lblRelease = new Label("Die Maus hat das Programm verlassen");
            add(lblRelease);
            lblRelease.setFont(new Font("Arial",Font.PLAIN,30));
            lblRelease.setBounds(100,500,550,40);
         }
      });
   }
   
      
   void initKomponenten()
   {
   }

   public Anwendung()
   {
      this.setTitle("MouseListener");
      this.setSize(1024,768);
      this.setLayout(null);
      this.initKomponenten();
      this.initListener();
   }
   
   public static void main(String[] args)
   {
   Anwendung anw = new Anwendung();
   anw.setVisible(true);
   }
}


Das funktioniert auch an sich. Allerdings hätte ich gerne, dass der bei mousePressed erscheinende Text nur solange angezeigt wird bis die Maus losgelassen wird. Danach soll dann an der Stelle der Text von mouseReleased stehen.

Ich hab schon so einiges versucht, hatte aber bisher keinen erfolg


Wäre also echt super wenn mir jemand helfen könnte

Besten dank im vorraus
 
Ich habe mal ein wenig herumprobiert und denke es müsste so gehen, dass du einen globalen MouseEvent definierst, damit alles darauf zugreifen kann. (MouseEvent k;)
Dann noch eine Endlosschleife die alles übernimmt:

Code:
...
addMouseListener(this);
new Controller().control();
...
public class Controller extends Thread
{
	public Controller() {}
	public void control() throws InterruptedException
	{
		while(true)
		repaint();
	}
}

In der Paint prüfst du dann ob die Taste gedrückt wurde:

Code:
public void paint(Graphics g)
{
	if(k != null && k.getButton() == MouseEvent.BUTTON1)
	{
		g.drawString("Hi", 50, 50);
	}
}

Habs zwar nicht vollstänidg getesten, aber selbst wenn es nicht funktioniert könntest du versuchen diesen Weg weiter zu verfolgen.
 
Hallo,

ich würde das ganze ohne Labels lösen, da der MouseListener des Frames nicht auf den Labels reagiert, bzw das MouseEntered oder das MouseExited-Event ausgelöst wird.

Java:
import java.awt.*;
import java.awt.event.*;


public class Anwendung extends Frame{

   /**
    *
    */
   private static final long serialVersionUID = 1L;
   
   private String mousePressed = "";
   private String mouseReleased = "";
   private String mouseClicked = "";
   private String mouseEntered = "";
   private String mouseExited = "";
   
   private Font font1 = new Font("Arial",Font.ITALIC,30);
   private Font font2 = new Font("Arial",Font.BOLD,30);
   private Font font3 = new Font("Arial",Font.PLAIN,30);
   private Font font4 = new Font("Arial",Font.PLAIN,30);
   private Font font5 = new Font("Arial",Font.PLAIN,30);
   
   void initListener()
   {
      this.addWindowListener(new WindowAdapter()
      {
         public void windowClosing(WindowEvent we)
         {
            System.exit(0);
         }
      });
      
      
      final Label lblKlick = new Label();
      add(lblKlick);
      lblKlick.setBounds(100,300,500,40);
      
      final Label lblHold = new Label();
      add(lblHold);
      lblHold.setBounds(100,100,500,40);
      
      final Label lblRelease = new Label();
      add(lblRelease);
      lblRelease.setBounds(100,200,500,40);
      
      final Label lblEntered = new Label();
      add(lblEntered);
      lblEntered.setBounds(100,400,500,40);
      
      final Label lblExited = new Label();
      add(lblExited);
      lblExited.setBounds(100,500,550,40);
      
      this.addMouseListener(new MouseAdapter()
      {
         public void mouseClicked(MouseEvent e)
         {
           setMouseClicked("Folge: Sie haben geklickt");
           repaint();
         }
      
         public void mousePressed (MouseEvent e)
         {
           setMousePressed("Sie halten die Maus gedrückt");
           setMouseReleased("");
           setMouseClicked("");
           repaint();
         }
      
         public void mouseReleased (MouseEvent e)
         {
            setMouseReleased("Sie haben die Maus losgelassen");
            setMousePressed("");
            repaint();
         }
      
         public void mouseEntered (MouseEvent e)
         {
            setMouseEntered("Die Maus befindet sich im Programm");
            setMouseExited("");
            repaint();
         }
         
         public void mouseExited (MouseEvent e)
         {
            setMouseExited("Die Maus hat das Programm verlassen");
            setMouseEntered("");
            repaint();
         }
      });
   }
   
   
   @Override
  public void paint(Graphics g)
  {
    super.paint(g);
    g.setFont(font1);
    g.drawString(getMouseClicked(), 100, 300);
    
    g.setFont(font2);
    g.drawString(getMousePressed(), 100, 100);
    
    g.setFont(font3);
    g.drawString(getMouseReleased(), 100, 200);
    
    g.setFont(font4);
    g.drawString(getMouseEntered(), 100, 400);
    
    g.setFont(font5);
    g.drawString(getMouseExited(), 100, 500);
  }
      
   void initKomponenten()
   {
   }

   public Anwendung()
   {
      this.setTitle("MouseListener");
      this.setSize(1024,768);
      this.setLayout(null);
      this.initKomponenten();
      this.initListener();
   }
   
   public static void main(String[] args)
   {
   Anwendung anw = new Anwendung();
   anw.setVisible(true);
   }


  /**
   * @return the mouseClicked
   */
  public String getMouseClicked()
  {
    return mouseClicked;
  }


  /**
   * @param mouseClicked the mouseClicked to set
   */
  public void setMouseClicked(String mouseClicked)
  {
    this.mouseClicked = mouseClicked;
  }


  /**
   * @return the mouseEntered
   */
  public String getMouseEntered()
  {
    return mouseEntered;
  }


  /**
   * @param mouseEntered the mouseEntered to set
   */
  public void setMouseEntered(String mouseEntered)
  {
    this.mouseEntered = mouseEntered;
  }


  /**
   * @return the mouseExited
   */
  public String getMouseExited()
  {
    return mouseExited;
  }


  /**
   * @param mouseExited the mouseExited to set
   */
  public void setMouseExited(String mouseExited)
  {
    this.mouseExited = mouseExited;
  }


  /**
   * @return the mousePressed
   */
  public String getMousePressed()
  {
    return mousePressed;
  }


  /**
   * @param mousePressed the mousePressed to set
   */
  public void setMousePressed(String mousePressed)
  {
    this.mousePressed = mousePressed;
  }


  /**
   * @return the mouseReleased
   */
  public String getMouseReleased()
  {
    return mouseReleased;
  }


  /**
   * @param mouseReleased the mouseReleased to set
   */
  public void setMouseReleased(String mouseReleased)
  {
    this.mouseReleased = mouseReleased;
  }
}

@Kai008
Ich hab deins zwar nicht getestet, aber das erfüllt ja nicht ganz die Anforderung. Er möchte ja den MouseListener vorführen. In deinem Fall wird sein MouseListener aber gar nicht verwendet.

Du hast zwar auch ne Cotroller-Klasse geschrieben die von Thread erbt, aber den Thread verwendest du nicht, deshalb wird das Programm durch die Endlos-Schleife blockieren. In einer Endlos-Schleife ständig repaint aufzurufen ist auch keine gute Lösung.

MFG

Sascha
 
Zurück