Event Handler

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

den Code unten habe ich so angepasst, dass ich meine Frage möglichst einfach stellen kann. Es ich kein originaler Code.

Ich habe eine Software von der ich nur die *.class-Dateien und nicht die Quellen besitze. Mit Hilfe von JADclipse habe ich eine Klasse dieser Software dekompiliert. Die dekompilierte Klasse sieht so aus:

Code:
public class Testklasse
{
	public Testklasse()
	{
		JFrame frame = new JFrame();  	  
		JButton button = new JButton("Testbutton"); 
		
		frame.add(button);  
		frame.pack();
		frame.setVisible( true );
	}
	
	public static void main(String[] args)
	{
		new Testklasse();
	}
}

Ich würde die Anwendung nun gerne dahingehend erweitern, dass nach dem Betätigen des Buttons "Testbutton" auf diese Ereignis reagiert wird. Meine Erweiterung soll so aussehen:

Code:
public class Behandlung implements ActionListener
{
	public void actionPerformed(ActionEvent e)
	{
		System.out.println("Button wurde betätigt");
	}
}

Nun muß ich meine actonPerformed-Methode aber irgendwie an dem Button so registrieren:

Code:
button.addActionListener(new Behandlung());

Das Problem ist allerdings, dass ich an die Quellen der Klasse "Testklasse" ja nicht rankomme und somit auch keine Änderung an diesen vornehmen kann. Ist es irgendwie anders möglich meine actionPerformed-Methode am Button anzumelden, ohne das ich die Quellen (die ich ja nicht habe) modifizieren muß?
 
Mal angenommen die main von Testklasse würde nicht gestartet werden... ginge es dann?
 
Irgendwo wird IMHO eine Liste aller offenen Frames und Dialoge gespeichert, wenn du die findest, könntest du den Componenten-Baum durchhangeln bis du auf den JButton triffst.

Edit: siehe Frame.getFrames
 
Irgendwo wird IMHO eine Liste aller offenen Frames und Dialoge gespeichert, wenn du die findest, könntest du den Componenten-Baum durchhangeln bis du auf den JButton triffst.

Mal angenommen ich würde den Button wirklich auf diese Weise finden... wohin müßte ich dann die Zeile

Code:
button.addActionListener(this);

schreiben? Wenn ich sie in meinen eigenen Code schreibe, dann bringt das doch eigentlich nichts, da dieser ja dann erstmal aufgerufen werden müßte. Erst nach dem Aufruf wäre meine actionPerformed-Methode beim Button als Listener angemeldet. Aufrufen kann ich meinen eigenen Code nicht, da ich dies ja aus den Klassen tun müßte von denen ich die Quellen nicht habe.

Beispiel:

Code:
public class Behandlung implements ActionListener
{
   // der Aufruf des Konstruktors müßte aus den Klassen geschehen von denen ich keine Quellen habe ==> nicht möglich
   public void Behandlung()
   {
       // button so besorgen wie du es erklärt hast

       // die folgende Zeile bringt nichts, da sie ja nie aufgerufen wird
       button.addActionListener(this);
   }

   public void actionPerformed(ActionEvent e)
   {
       System.out.println("Button wurde betätigt");
   }
}
 
Anonymous hat gesagt.:
Aufrufen kann ich meinen eigenen Code nicht, da ich dies ja aus den Klassen tun müßte von denen ich die Quellen nicht habe.
Was soll die Frage überhaupt wenn du gar keine Möglichkeit hast eigenen Code aufzurufen? Was nützt dir der tollste ActionListener wenn du ihn nicht anhängen kannst?
 
... hätte ja sein können, das es dafür eine Lösungsvariante gibt.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben