Hallo Klaus.
Wie ist es möglich, Ereignisse - anstatt per Maus- oder
Buttonclick - einfach im Programm selbst zu erzeugen ?
Buttons stellen (a) eine doClick()-Methode bereit, die
programmatische Klicks erlauben.
Verallgemeinert werden bei grafischen Java-Komponenten
ActionListener registriert, die auf ein Ereignis, wie
z.B. den Button-Klick reagieren. Du kannst Dir also
die (b) registrierten ActionListener einer Komponente
zurückgeben lassen und deren actionPerformed()-Methode
manuell aufrufen.
Dies ist aber für das was Du vorhast schlechter Stil, denn
eigentlich sind die ActionListener ja nur eine indirekte
Form, eine bestimmte Zielfunktion eines Objekts aufzurufen
(z.B. erstelleNeueFigur()).
Wenn Du also programmatisch im Hintergrund neue Figuren
erstellen möchtest, solltest Du © die Zielfunktion in
einem Thread ohne die Umwege über einen ActionListener
aufrufen.
Weils so schön ist, die Hackvarianten (a) und (b) zur Illustration
in einen (stilistisch schlechten) Beispielcode gegossen:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ButtonTest {
public ButtonTest() {}
public void doSomething() {
System.out.println("Doing important stuff ...");
}
public static final void main(String[] args) {
JFrame frame = new JFrame("ButtonTest");
final ButtonTest test = new ButtonTest();
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
test.doSomething();
}
}
);
frame.getContentPane().add(okButton);
frame.setSize(new Dimension(400,300));
frame.setVisible(true);
try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); }
System.out.println("(a) Clicking button automagically ...");
okButton.doClick();
try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); }
System.out.println("(b) Trigger all action listeners automagically ...");
ActionListener[] arrListeners = okButton.getActionListeners();
for (int i=0; i
Links zum Thema:
http://java.sun.com/docs/books/tutorial/uiswing/learn/example2.html#handlingEvents
sowie Arbeit mit Threads unter
http://java.sun.com/docs/books/tutorial/essential/concurrency/index.html
Gruß,
-Andreas