# JLabel mit ActionListener?



## Lector (28. Feb 2005)

Hi
also ich hab mir ein Label erzeugt das die JLabel extendet. Jetzt wuerde ich dem Label gerne eine Listener hinzufügen der auf das anklicken des Feldes reagiert...
schonmal danke fuer die hilfe!!


----------



## Wildcard (28. Feb 2005)

```
JLabel label = new JLabel();
     label.addMouseListener(new MouseAdapter()
    {
        public void mouseClicked(MouseEvent e)
        {
            // TODO Auto-generated method stub

        }
    });
```


----------



## Lector (28. Feb 2005)

mmhh geht das auch anders? hab also nen label-array.

will so wie beim listener das zeugs in der class importieren und wenn auf ein label geklickt wird soll einfach ne funktion aufgerufen werden wo ich zum beispiel den array index in ein fextfeld schreibe...


----------



## Wildcard (28. Feb 2005)

So zum Beispiel?

```
public class LabelArray extends MouseAdapter
{
    JLabel[] array = new JLabel[2];
    
    JLabel label1,label2;
    
    /**
     * 
     */
    public LabelArray()
    {
        label1 = new JLabel();
        label1.addMouseListener(this);
        label2 = new JLabel();
        label2.addMouseListener(this);
        array[0]=label1;
        array[1]=label2;
       
    }
    
    public void mouseClicked(MouseEvent e)
    {
        for (int i=0;i<array.length;i++)
        {
           if(e.getSource().equals(array[i]))
                   System.out.println("Das war label "+i);
        }
    }
}
```


----------



## mic_checker (28. Feb 2005)

Dann schreib halt ne extra Klasse die 
- entweder von MouseAdapter erbt
- oder MouseListener implementiert

So wie Wildcard es gezeigt hat, ist es ganz praktisch, weil du nur mouseClicked() überschreiben musst, wenn du das Interface implementierst, dann musst du die andern Methoden auch implementieren.

Zu 1)

```
class MouseL extends MouseAdapter {
			public void mouseClicked(MouseEvent event)
			{
				//...
			}
	}
```

Zu 2)

```
class MouseL implements MouseListener {
			public void mouseClicked(MouseEvent event)
			{
				//..
			}
		
			public void mouseEntered(MouseEvent event)
			{
		
			}
		
			public void mouseExited(MouseEvent event)
			{
		
			}
		
			public void mousePressed(MouseEvent event)
			{
				
			}
		
			 public void mouseReleased(MouseEvent event)
			 {
			 	
			 }
	}
```


----------



## Lector (28. Feb 2005)

@Wildcard  ok thx hatte implements MouseAdapter gemacht... da gabs nen error


----------



## mic_checker (28. Feb 2005)

Wildcard hat gesagt.:
			
		

> ```
> JLabel label = new JLabel();
> label.addMouseListener(new MouseAdapter()
> {
> ...



lector: Such mal nach "anonymen Klassen" wenn dir diese Schreibweise nicht geläufig ist. Gibt sicher schon einige Beiträge dazu im Forum.



> ne funktion aufgerufen werden wo ich zum beispiel den array index in ein fextfeld schreibe...


btw. in Java heisst es *Methode* nicht Funktion


----------



## Lector (28. Feb 2005)

mmhh mit extend bekomm ich auch errors... wie kann ich das richtig machen??

```
public class game extends JFrame, MouseAdapter implements ActionListener, ItemListener{
```


----------



## Wildcard (28. Feb 2005)

Du kannst nicht mehrere Klassen extenden.
Dann musst du statt des MouseAdapters den MouseListener verwenden.
Ist genau das gleiche, nur musst du mehr Methode implementieren


----------



## Lector (28. Feb 2005)

ok habs jetzt
also danke an alle


----------



## mic_checker (28. Feb 2005)

Dann kannst du dir wie oben gezeigt deine Klasse schreiben die die Methoden von MouseListener implementiert, ich persönlich finde das übersichtlicher als alles oben zu implementieren.

Mehrfachvererbung ist wie Wildcard geschrieben hat nicht möglich. Du kannst allerdings mehrere Interfaces implementieren ....

edit:
hm..zu langsam...


----------



## Wildcard (28. Feb 2005)

Wenn man sich an den vielen unnötigen Methoden des MouseListeners stört kann das auch so umgehen:

```
public class LabelArray extends MouseAdapterJFrame
{
    
    public void mousePressed(MouseEvent e)
    {
        // TODO Auto-generated method stub
    }
}

class MouseAdapterJFrame extends JFrame implements MouseListener
{

    /**
     * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
     */
    public void mouseClicked(MouseEvent e)
    {
        // TODO Auto-generated method stub
        
    }

    /**
     * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
     */
    public void mousePressed(MouseEvent e)
    {
        // TODO Auto-generated method stub
        
    }

    /**
     * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
     */
    public void mouseReleased(MouseEvent e)
    {
        // TODO Auto-generated method stub
        
    }

    /**
     * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
     */
    public void mouseEntered(MouseEvent e)
    {
        // TODO Auto-generated method stub
        
    }

    /**
     * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
     */
    public void mouseExited(MouseEvent e)
    {
        // TODO Auto-generated method stub
        
    }
    
}
```


----------



## Lector (28. Feb 2005)

hab noch ein problem. das passt zwar net direkt hier rein aber ich will nicht nen extra thema dafuer starten...

wie kann ich in einem label einen zeilenumbruch machen??
mit \n klappts anemlich nicht


----------



## Wildcard (28. Feb 2005)

```
<html>text
text</html>
```


----------



## Lector (28. Feb 2005)

thx aber seid dem ich den html-tag drinnen hab hat das total lange ladezeiten?!?


----------



## Wildcard (28. Feb 2005)

Der unterschied dürfte eigentlich nicht so riesig sein.
Kann das auch an was anderem liegen?
Ohne html geht ein mehrzeiliges JLabel nicht.


----------



## mic_checker (28. Feb 2005)

zeig mal deinen code. habs mit einem beispielcode probiert und das label auf diesen text gesetzt, also mit dem Zeilenumbruch und ging eigentlich genauso schnell.


----------



## mic_checker (28. Feb 2005)

Habe gerade mal mit currentTimeMillis "gemessen" - ist natürlich nicht sehr aussagekräftig, aber liefert ja schon mal Hinweise.

Das Resultat: Die Unterschiede in der Darstellung von html und "normalem Text" waren unbedeutend klein, bzw. kaum vorhanden, müsste demnach bei dir ne andere Ursache haben..


----------

