eigene event-Klasse, event posten

Status
Nicht offen für weitere Antworten.

wicki

Mitglied
Hallo,

mein Fernziel: eigene Event-Klasse und Event-Source erzeugen
Im Test will ich ausprobieren, wie man eine Event-Instanz in die EventQueue
reinstellt (also wie man das Event aktiviert). Dazu verwende ich einen
ActionEvent und einen Button. Also wie im normalen Leben, nur dass das Event
nicht durch Button-Click oder die Methode doClick, sondern durch meine
Programmanweisungen erzeugt und aktiviert werden soll.
Wenn der 1. Button gedrückt wird, wird ein Event für den 2. erzeugt und
gepostet.
Ich habe es mit 2 Varianten versucht (siehe Code-Ausschnitt), leider hat keine
Variante funktioniert.
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MyClass extends JFrame implements ActionListener {
    JButton bb,bb2;
    public MyClass() {
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        bb = new JButton("Button");
        bb.addActionListener(this);
        bb2= new JButton("Button2");
        bb2.addActionListener(this);
        JPanel p=new JPanel();
        p.add(bb);
        p.add(bb2);
        getContentPane().add(p);
        setSize(200,100);
        setVisible(true);
    }
    public void actionPerformed(ActionEvent ae) {
        System.out.println("Id="+ae.getID()+", "+ae.getActionCommand());
        if (ae.getActionCommand()=="Button") {
          ActionEvent ae2 = new ActionEvent(bb2,1001,"Button2");
          if (false)
          //1.Variante
            bb2.dispatchEvent(ae2);	//ist wahrscheinlch nur der Verteiler
          else {
          //2.Variante
            EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
            eq.postEvent(ae2);
          }
          System.out.println("ActionEvent dispatched");
        }
    }
    public static void main(String args[]) {
        new MyClass();
    }
}

Bitte um Hinweise.[/code]
 

André Uhres

Top Contributor
Versuch's mal mit fireActionPerformed.
Da diese Methode protected ist, kann man sie ohne Weiteres überschreiben
und dann direkt aufrufen:
Code:
package layout;
/*
 * Buttonclick.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyButtonclick extends JFrame {
    private JButton jButton1;
    private MyButton jButton2;
    public MyButtonclick() {
        super("MyButtonclick");
        jButton1 = new JButton();
        jButton2 = new MyButton("jButton2");

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new FlowLayout());

        jButton1.setText("jButton1");
        jButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);

        jButton2.setText("jButton2");
        jButton2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton2);

        pack();
    }
    
    private void jButton1ActionPerformed(ActionEvent evt) {
        System.out.println("jButton1");
        jButton2.fireActionPerformed(evt);
    }

    private void jButton2ActionPerformed(ActionEvent evt) {
        System.out.println("jButton2");
    }
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MyButtonclick().setVisible(true);
            }
        });
    }
    
}
class MyButton extends JButton{
    public MyButton(){
        super();
    }
    public MyButton(String str){
        super(str);
    }
    @Override
    protected void fireActionPerformed(ActionEvent event) {
        super.fireActionPerformed(event);
    }
    
}
 

wicki

Mitglied
Dank für die elegante Lösung, die so eine Art "doClick"- Variante darstellt.
Ich habe mir inzwischen überlegt, dass die Nutzung eines "PropertyChangeEvent"
meinen Absichten besser entspricht.
Code:
//Ereignisquelle
class PropertyChangeStringBean {
  private String name = "Originalwert";
  //Hilfsklasse zur Ereignisbehandlung
  private PropertyChangeSupport changes = new PropertyChangeSupport( this );

  //Eigenschaft, deren Änderung überwacht wird
  public void setName( String newName ) {
    String oldName = string;
    string = newName;
    changes.firePropertyChange( "otto"      //willkürlicher Name der Eigenschaft
            , oldName, newName );
  }
  public String getName() {
    return name;
  }
  public void addPropertyChangeListener(String propertyName, PropertyChangeListener l ) {
    changes.addPropertyChangeListener( l );
  }
  public void removePropertyChangeListener( PropertyChangeListener l ) {
    changes.removePropertyChangeListener( l );
  }
}

//Listener-Klasse
class MyClass implements PropertyChangeListener {
	.
	.
    PropertyChangeStringBean pb =
        	new PropertyChangeStringBean();    //Quelle des Ereignisses
    pb.addPropertyChangeListener(
                "otto"      //Name der zu überwachenden Eigenschaft
                ,this);     //Listener
	.
	.
    public void propertyChange(PropertyChangeEvent e) {
        System.out.println("Source="+e.getSource() +
                ", "+e.getOldValue() +
                " --> "+e.getNewValue());
    }
	.
	.
}

Wenn nun irgendwer (Listener, Quelle selbst oder ein dritter) die Methode
"setName" der Quelle aufruft, wird ein "PropertyChangeEvent" erzeugt und
per "firePropertyChange" an die registrierten Listener übermittelt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
J Eigene Api erstellen und dann auch verwenden - Ordnerstruktur Allgemeine Java-Themen 1
RalleYTN Eigene ScriptEngine? Allgemeine Java-Themen 14
L Eigene Dependency Injections definieren? Allgemeine Java-Themen 4
K Eigene API erstellen? Allgemeine Java-Themen 13
T Best Practice Eigene GUI programmieren | MouseMotion Detection Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
J eigene Java Bibliothek Allgemeine Java-Themen 2
M Output einer anderen/externen .jar in eigene JTextArea Allgemeine Java-Themen 4
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
D Eigene/r Collection/Container Allgemeine Java-Themen 3
F Eigene .jar mit anderer .jar öffnen Allgemeine Java-Themen 7
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
H Best Practice Ideensuche: Flexibel hinzufügbare eigene Parser Allgemeine Java-Themen 6
T OOP Die eigene Bruchklasse Allgemeine Java-Themen 11
P Eigene Exception Klasse Allgemeine Java-Themen 7
J Java - Eigene DLL importieren Allgemeine Java-Themen 25
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S OOP Problembereichsmodell: Bestehende Framework Klasse in eigene Klassenstruktur einbinden Allgemeine Java-Themen 9
E Eigene Exception Klasse erstellen Allgemeine Java-Themen 3
S Methoden Eigene Klasse als Rückgabewert Allgemeine Java-Themen 6
S eigene regEx schreiben Allgemeine Java-Themen 4
O Collections Eigene Methodenzusicherung bei Collections als Parameter Allgemeine Java-Themen 2
M Eigene Klasse verschlüsselt in Datei speichern Allgemeine Java-Themen 13
N Geodaten für eigene Routenplanung Allgemeine Java-Themen 5
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
C Eigene Sounddateien schreiben Allgemeine Java-Themen 12
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
M Best Practices Exception Handling für eigene library Allgemeine Java-Themen 8
M Eigene Factory Klasse Allgemeine Java-Themen 21
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
S eigene Update Funktion Allgemeine Java-Themen 5
H2SO3- getMethods(): eigene methoden rausfinden Allgemeine Java-Themen 4
C eine eigene Javadoc erstelen Allgemeine Java-Themen 3
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
S Eigene Bibliothek Allgemeine Java-Themen 2
M Eigene Dateiendung? Allgemeine Java-Themen 3
M Plugins für eigene Programme Allgemeine Java-Themen 3
S Eigene Events feuern Allgemeine Java-Themen 3
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
A Eigene Java Plugins entwickeln - wie optimal? Allgemeine Java-Themen 14
R Eigene ArrayList vom Typ Short, Integer oder Double Allgemeine Java-Themen 4
U Eigene "Dining Philosopher" Interpretation weckt Philos nie auf Allgemeine Java-Themen 2
0x7F800000 Wovon eigene Events für spezialisierte JComponents ableiten? Allgemeine Java-Themen 2
SuperSeppel13 Packete der Java Bibliothek ins eigene Prjekt integrieren Allgemeine Java-Themen 4
P Eigene Klasse kopieren die auf sich selbst refferenziert Allgemeine Java-Themen 8
G Umgebungsvariabeln auslesen (Path, Temp, oder eigene) Allgemeine Java-Themen 2
T Eigene PID ermitteln! Allgemeine Java-Themen 3
D Icon für eigene Dateiendung Allgemeine Java-Themen 7
G Eigene "Speicherverwaltung" Allgemeine Java-Themen 5
H eigene Annotations Allgemeine Java-Themen 2
S eigene Klasse die JButton extended - als Liste! Allgemeine Java-Themen 6
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
A Eigene Wrapper-Klassen Allgemeine Java-Themen 2
J Kann eigene Klasse nicht ermitteln Allgemeine Java-Themen 4
M Wann verwendet man PropertyChangedEvents, wann eigene? Allgemeine Java-Themen 3
J OpenOffice.org Events in eigene Anwendung umleiten Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
B eigene Klassen verkaufen Allgemeine Java-Themen 2
reibi Eigene exception mit feld "serialVersionUID" Allgemeine Java-Themen 3
M Eigene .jar in anderes Programm importieren[eclipse] Allgemeine Java-Themen 6
T Eigene Libary Allgemeine Java-Themen 6
E Eigene Exception Allgemeine Java-Themen 11
Q Bibliotheken mit ins eigene Jar aufnehmen Allgemeine Java-Themen 4
M Eigene Exception Klasse Allgemeine Java-Themen 4
M eigene Objekte vergleichen Allgemeine Java-Themen 6
K log4j - eigene Info-Ausgaben Allgemeine Java-Themen 5
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
G JWindow verschieben bei mousedragged auf eigene titelleiste Allgemeine Java-Themen 3
N Methoden in eigene Dateien auslagern? Allgemeine Java-Themen 10
B Eigene Datentypen Allgemeine Java-Themen 5
G Brauche hilfe bei JMF: Wie eigene Streaming Data Source! Allgemeine Java-Themen 4
G eigene klassen die ein jar verwenden als neues jar erstellen Allgemeine Java-Themen 4
O Externe Jars in eigene JAr packen in Eclipse Allgemeine Java-Themen 5
R Updateprozedur ü. Internet fürs eigene Programm? Allgemeine Java-Themen 24
G eigene uhrzeit in einer java applikation führen Allgemeine Java-Themen 19
R Eigene Konfigurationsdatei für größere Projekte. Allgemeine Java-Themen 4
J Eigene Callback Methode? Allgemeine Java-Themen 3
S eigene evetns erstellen Allgemeine Java-Themen 5
K eigene GUI Komponente wird nicht angezeigt Allgemeine Java-Themen 3
D Eigene Classes aus anderen .java-Dateien Allgemeine Java-Themen 2
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5
C Die Konsole ins eigene Programm einbauen Allgemeine Java-Themen 5
G Key-Event-Sender Allgemeine Java-Themen 5
E Datei verschoben Event Allgemeine Java-Themen 3
D Event Sourcing umsetzen Was? Wie? Allgemeine Java-Themen 33
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
M Best Practice Alternativen für Event-Handling Allgemeine Java-Themen 3
C Zugriff auf Event felder Allgemeine Java-Themen 0
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
das-mo Warten auf Event Allgemeine Java-Themen 7
K Event benutzen Allgemeine Java-Themen 4
F None-GUI-Event Handling Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben