? getSource() ?

Status
Nicht offen für weitere Antworten.

igel

Mitglied
Hallo,
hier die nächste Frage.
Hier der Code...

Code:
public void actionPerformed(ActionEvent evt) {
    	Object quelle = evt.getSource(); //Objekt, von dem das Ereignis ausgelöst wurde
    	System.out.println(quelle);  
    	if(quelle == ???){
    		System.out.println("rechts-Button-pressed"); 
    	}else if(quelle == ???) 
    		System.out.println("links-Button-pressed"); 
    	
    }

Was kann ich meinem Button im Konstruktor mitgeben, dass ich quelle mit irgendwas vergleichen kann?
Ich habe es mit den Strings, die ich jeweils dem Konstruktor meines Buttons übergebe, versucht.
Geht aber nicht...
 

igel

Mitglied
Eins noch.
Wenn ich mit die jeweilige Quelle des jeweils gedrückten Button ausgeben lasse,
bekomme ich als Ausgabe für den einen Button Timer@174cc1f
und der andere Button Timer@18558d2
Vielleicht hilft das weiter...
 

igel

Mitglied
Mit dem Namen von meinem Button habe ich es probiert.
Das funktioniert nicht.
Hat es etwas mit meinem Timer zu tun!
Mein Button muss bei MousePressed reagieren.
Dort starte ich meinen Timer. Und hier bräuchte ich eigentlich schon eine Unterscheidung meiner Button???
Aber wie???
Hier mein Code
Code:
public class AutoRepeatButton extends JLabel implements ActionListener{
	private Timer zeit,zeit1, zeit2;
	private int t1, t2;
	public Timer time=new Timer(0,this);
	public String textButton;
	
   //Konstruktor
	public AutoRepeatButton(String text, ImageIcon image,int delay1, int delay2){
		super(text);
		setIcon(image);
		textButton=text;	
		System.out.println(textButton);
		t1=delay1;//500 msec übergeben
	    t2=delay2;//200 msec übergeben
	    addMouseListener(new MyMouseListener());
	    addActionListener(new HinzuListener());
	    removeActionListener(new ZurueckListener());
	    time.setInitialDelay(t1); //Setzt die Millisekunden, bis das erste Event ausgelöst wird
        time.setDelay(t2);//Setzt die Millisekunden, zwischen denen jeweils ein Event ausgelöst wird
        
	 }
    /***Methoden***/
    public void startEvent(){
    	System.out.println("zeit1"); 
    	time.start(); //Startet alle 200 msec ein ActionEvent	
    }

    public void stopEvent(){
        time.stop();      	
    }
    /*** set und get Methoden für Zeitverzögerung***/
    public void set_t1(int i)
    {
        t1 = i;
        time.setInitialDelay(t1);
    }

    public void set_t2(int i)
    {
        t2 = i;
        time.setDelay(t2);
    }

    public int get_t1()
    {
        return t1;
    }

    public int get_t2()
    {
        return t2;
    }
   
    public void actionPerformed(ActionEvent evt) {
    	Object quelle = evt.getSource();//Objekt, von dem das Ereignis ausgelöst wurde.
    	//System.out.println(quelle);  
    	if(quelle == textButton){
    		System.out.println("rechts-Button-pressed"); 
    	}else 
    		System.out.println("links-Button-pressed"); 
    	
    }
    public void addActionListener(ActionListener e){
    	
    }
    public void removeActionListener(ActionListener el){
    
    }

	 /***innere Klassen***/
	public class MyMouseListener extends MouseAdapter {
        public void mousePressed(MouseEvent m) {
        	setBorder( BorderFactory.createLoweredBevelBorder() );
        	startEvent(); //Zeit wird gezählt
        }
        public void mouseReleased(MouseEvent e) {
        	setBorder( BorderFactory.createRaisedBevelBorder() );
        	stopEvent();
        	
        }
     } 

	public class HinzuListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			System.out.println("Berührt");
		}
	
	}
	public class ZurueckListener implements ActionListener{
		public void actionPerformed(ActionEvent arg0) {
			//funktion aufrufen zum verschieben des JSilder
		}
	}
	
	/***Ende innere Klassen***/
}
/***Ende AutoRepeatButton Klasse***/
 

The_S

Top Contributor
du machst ja auch

Code:
if (quelle == textButton) {

aber vorher schreibst du

Code:
public String textButton;

Wie willst du auf nen String klicken?
 

igel

Mitglied
Ja, aber im Konstruktor von AutoRepeatButton setze ich
Code:
textButton=text; // text übergebe ich dem Konstruktor
 

AMiGA

Bekanntes Mitglied
Strings sollte man auch mit equals vergleichen...

Code:
if(quelle.equals(textButton))
 

Semerzo

Aktives Mitglied
Soweit ich das verstehe, liefert getSource() eine Referenz auf das auslösende Object. dh du könntest mit:
Code:
if (quelle == referenzDesFraglichenButtons)
Herausbekommen, welcher Button das ist.

Mit 'referenzDesFraglichenButtons' meine ich soetwas
Code:
 public class MeineKlasse {

  protected JButton knopfNummer1;
  protected JButton knopfNummer2;

  // ... der ganze Rest deiner Klasse.

  public void actionPerformed(ActionEvent evt) {
       Object quelle = evt.getSource(); //Objekt, von dem das Ereignis ausgelöst wurde
       System.out.println(quelle); 
       if(quelle == knopfNummer1){
          System.out.println("knopfNummer1 pressed");
       }else if(quelle == knopfNummer2)
          System.out.println(knopfNummer2 pressed");       
    }

  // ... usw

Wenn ich mit die jeweilige Quelle des jeweils gedrückten Button ausgeben lasse,
bekomme ich als Ausgabe für den einen Button Timer@174cc1f
und der andere Button Timer@18558d2
Dieses
Code:
Timer@18558d2
entspricht der Standard toString Methode, nämlich
nimm den Namen der Klasse des Objekts, nimm ein @ und die Speicheradresse (in der VM), mache daraus einen String, fertig.

Daran siehst du, dass die Events von den Timern ausgelöst worden sind.

Hmm, dann dürfte dir der Code oben doch nicht helfen.
Hmm, warum machst du das?
Code:
 implements ActionListener
 
G

Gast

Gast
Object lSource = pE.getSource();
String [] lObjectStrings = lSource.toString().split(",");
String lCommand = (lObjectStrings[lObjectStrings.length - 1]);
lCommand = lCommand.replaceAll("]", " ");
lCommand = lCommand.replaceAll("text=", " ");
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben