JLabel mit ActionListener?

  • Themenstarter Themenstarter Lector
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
L

Lector

Gast
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!!
 
Code:
     JLabel label = new JLabel();
     label.addMouseListener(new MouseAdapter()
    {
        public void mouseClicked(MouseEvent e)
        {
            // TODO Auto-generated method stub

        }
    });
 
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...
 
So zum Beispiel?
Code:
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);
        }
    }
}
 
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)
Code:
	class MouseL extends MouseAdapter {
			public void mouseClicked(MouseEvent event)
			{
				//...
			}
	}

Zu 2)
Code:
	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)
			 {
			 	
			 }
	}
 
@Wildcard ok thx hatte implements MouseAdapter gemacht... da gabs nen error
 
Wildcard hat gesagt.:
Code:
     JLabel label = new JLabel();
     label.addMouseListener(new MouseAdapter()
    {
        public void mouseClicked(MouseEvent e)
        {
            // TODO Auto-generated method stub

        }
    });

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 😉
 
mmhh mit extend bekomm ich auch errors... wie kann ich das richtig machen??
Code:
public class game extends JFrame, MouseAdapter implements ActionListener, ItemListener{
 
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
 
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...
 
Wenn man sich an den vielen unnötigen Methoden des MouseListeners stört kann das auch so umgehen:
Code:
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
        
    }
    
}
 
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 🙁
 
thx aber seid dem ich den html-tag drinnen hab hat das total lange ladezeiten?!?
 
Der unterschied dürfte eigentlich nicht so riesig sein.
Kann das auch an was anderem liegen?
Ohne html geht ein mehrzeiliges JLabel nicht.
 
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.
 
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..
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben