Event-Handling: Was steckt dahinter?

Status
Nicht offen für weitere Antworten.

kp007

Mitglied
Hallo java-forum.net Community,

Ich habe da eine Verständnisfrage bezüglich Event-Handling in Java.

Nehmen wir z.B. einen Button. Wird jedesmal wenn ich auf den Button klicke ein Event von diesem Button in Echtzeit ausgelöst und an einen Listener geschickt? Ich meine, prüft das „System“ jedes mal , ob ich die addListener() – Methode benutze oder nicht? Denn wenn es jedesmal, wenn ich auf den Button klicke der Button ein Event auslöst und zwar unabhängig davon ob ein Listener existiert oder nicht, dann ist das doch Datenverschwendung.

Oder ein anderes Beispiel : JFrame oder Frame.

Ich verstehe das so . Wenn ich die addWindowListener()- Methode verwende, sage ich dem Programm doch nur, was es machen soll, wenn es ein Event „abfängt“ oder ist da mehr dahinter?

Kann mir jemand mal dieses Delgationsmodell verständlich erklären. Ich brauche nur die Theorie. Die Ereignisbehandlung an sich macht mir keine Probleme und anwenden kann ich sie auch, aber ich will es auch richtig verstehen. Deswegen meine abschließende Frage : Was läuft da wirklich ab ???

Gruß,


P.S. : Bitte auf alle Saätze, die mit einem ? enden, eingehen :D
 
B

Beni

Gast
Der JButton verschickt sein ActionEvent sobald er ein MouseEvent erhält. Das macht er immer, auch wenn keine Listeners bei ihm registriert sind.

Das ist aber keine schlimme Verschwendung, zum einen benötigt eine Instanc von ActionEvent nicht sehr viel Platz, zum anderen ist jeder normale Button mit (mindestens) einem ActionListener ausgestattet. Denn es ist selten so, dass der Programmierer einen Button irgendwo hinzufügt, und diesen Button gar nicht abhört. (Was würde ein "leerer" Button auch für einen Sinn haben?)


Eine kurze Zusammenfassung aus dem Buch Java ist auch eine Insel

Das Ganze nennt sich "Delegation Model".

Es gibt zwei Teile: die Event Source, und den Event Listener.

Die Source (z.B. ein Button) ist eine zwar funktionsfähige Klasse, die aber so wenig Code wie möglich hat.
Sobald die Source irgendetwas komplexeres ausführen sollte, reicht sie diese Aufgabe weiter. (delegiert sie an jemand anderen).

Der Befehlsempfänger ist der (oder besser die) Listeners. Er wird von der Source zu genau bestimmten Zeitpunkten aufgerufen, und führt eine komplexere Aufgabe durch.

Dieses Model bietet eine wunderschöne Trennung von "Daten" und "GUI". Bis auf eine kleine Verknüpfung haben der Listener und die Source nichts miteinander zu tun. Beide können sich auf ihr Kerngeschäft konzentrieren (Button: gut aussehen, Listener: komplexer Algorithmus)


Diese Model bietet auch eine hohe Flexibilität:

Der Listener kann (während der Laufzeit) von der Source getrennt werden und anderen Sourcen hinzugefügt. Auch können mehrere Listener gleichzeitig eine Source überwachen (z.B. ein Listener der die Aktion ausführt, ein anderer der eine Log-Datei schreibt). Oder ein Listener kann auf mehrere Sources verteilt sein (einmal das Menüitem, das andere mal der Toolbar-Button).


Weil das alles so schön ist, wird das Delegation Model auch in die umgekehrte Richtung verwendet. Die Daten sind die Event Source, und die GUI implementiert die Listeners. Das kann man z.B. beim DefaultTableModel und dem JTable schön sehen. Wird dem TableModel eine neue Row hinzugefügt, sendet es ein TableModelEvent aus, welches das JTable empfängt.
 

kp007

Mitglied
Müsste es aber dann keine Fehlermeldung geben, wenn der Button ein Event losschickt und gar kein Listener angemeldet ist. Der Button muss doch "in Laufzeit" eine Methode aufrufen um sein Event an den Listener zu schicken und wenn überhaupt kein Listener angemeldet ist ?

Wie könnte das konkret ( welche Methode, Aufruf, Statemnet) aussehen, wenn z.B. das X (Schließen) an der rechten oberen Fensterecke ein Event an den WindowListener schickt.

Da muss eine Struktur dahinter stecken , sonst macht die Verwendung von Schnittstellen keinen Sinn.

Gruß
 
B

Beni

Gast
Nein, es müsste keinen Fehler geben. Stell dir das ganze als Array vor, bei dem jedes Element aufgerufen wird, wenn keine da sind, wird die Schlaufe einfach nur 0 mal durchgegangen.

Es hat einen Thread (EventDispatchThread), der laufend Mouse-, Key-, und andere low-level-Events aufnimmt, und welcher die Dialoge, Frames und Windows davon unterrichtet. Diese Events werden weitergereicht bis die Component gefunden wurde, die betroffen ist (z.B. diejenige die den Fokus hat, bei einem KeyEvent).

Dann verarbeiten diese Components das low-level-Event und stellen (vielleicht) ein high-level-Event her (z.B. ein ActionEvent).
Dieses High-Level-Event wird dann an die Listener weitergeschickt.

Die Struktur ist dieser Aufruf, der im EventDispatchThread beginnt, und über mehrere Methoden bis zu einem Listener geleitet wird.

Was dein konkretes Beispiel angeht: Hier die Aufrufe, die in einem "actionPerformed" endet (die untere Methode ruft jeweils die obere auf):
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 23 in FrameTest$1))
FrameTest$1.actionPerformed(ActionEvent) line: 23 //<<<<<<<<<<<<<<<<<< dies ist die selbstgeschriebene Methode
JButton(AbstractButton).fireActionPerformed(ActionEvent) line: not available
AbstractButton$ForwardActionEvents.actionPerformed(ActionEvent) line: not available
DefaultButtonModel.fireActionPerformed(ActionEvent) line: not available
DefaultButtonModel.setPressed(boolean) line: not available
MetalButtonListener(BasicButtonListener).mouseReleased(MouseEvent) line: not available
JButton(Component).processMouseEvent(MouseEvent) line: not available
JButton(Component).processEvent(AWTEvent) line: not available
JButton(Container).processEvent(AWTEvent) line: not available
JButton(Component).dispatchEventImpl(AWTEvent) line: not available
JButton(Container).dispatchEventImpl(AWTEvent) line: not available
JButton(Component).dispatchEvent(AWTEvent) line: not available
LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: not available
LightweightDispatcher.processMouseEvent(MouseEvent) line: not available
LightweightDispatcher.dispatchEvent(AWTEvent) line: not available
JFrame(Container).dispatchEventImpl(AWTEvent) line: not available
JFrame(Window).dispatchEventImpl(AWTEvent) line: not available
JFrame(Component).dispatchEvent(AWTEvent) line: not available
EventQueue.dispatchEvent(AWTEvent) line: not available
EventDispatchThread.pumpOneEventForHierarchy(int, Component) line: not available
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: not available
EventDispatchThread.pumpEvents(int, Conditional) line: not available
EventDispatchThread.pumpEvents(Conditional) line: not available
EventDispatchThread.run() line: not available


Nimm mal einen Debugger, und beobachte selbst ein bisschen, was im Hintergrund passiert. Das nützt dir vielleicht mehr, als nur Erklärungen.
 

Tobias

Top Contributor
Ich hatte das alles schon mal heute morgen geschrieben, und dann habe ich den Text verloren, weil meine Session abgelaufen war - ARGH!

Ich versuch es noch einmal:

Ich halte es für sinnvoll, sich das Model anhand von Code klar zu machen - nicht Code zur Verwendung, sondern Code zur Implementierung des Listener-Patterns. Ich möchte dabei nicht mit dem WindowListener hantieren, wie von dir vorgeschlagen, weil der einigermaßen kompliziert ist (in Grundzügen aber genauso funktioniert) - schließlich reagiert der WindowListener auf andere Listener wie den MouseListener!
Bauen wir uns lieber einen eigenen Listener, der nicht so tief ans Beriebssystem ran muß wie der WindowListener. Mein Vorschlag wäre ein ChangeListener, der es uns erlaubt, auf Änderungen in der Struktur von Collections zu reagieren.

Zunächst einmal brauchen wir ein Interface für die Listener, um Typsicherheit bei der Übergabe solcher Objekte zu erhalten und um die zu implementierende Methode eindeutig festzulegen:

Code:
public interface ChangeListener {
    public abstract changeHappened(ChangeEvent);
}

Das Interface definiert nur eine einzige Methode: changeHappened(). Dieser Methode wird ein Objekt übergeben, das alle benötigten Informationen zur Veränderung in der Collection enthält.
In unserem speziellen Fall könnte das Objekt wie folgt aussehen:

Code:
public ChangeEvent {
    public static int REMOVED = 1;
    public static int ADDED = 2;
    public static int RESORTED = 3;

    int index;
    int type;

    public ChangeEvent(int index, int type) {
        if(type == RESORTED) {
            this.index = -1;
        } 
        else {
            this.index = index;
        }

        this.type = type;
    }

    public int getType() {
        return type;
    }

    public int getIndex() {
        return index;
    }
}

Aus diesem Objekt lassen sich alle wichtigen Informationen ziehen, die mit der Strukturänderung in der Collection zu tun haben. Fehlt noch ein Objekt, das dieses Event verschickt. Dieses Objekt muß eine Liste mit allen Objekten implementieren, die über Änderungen informiert werden wollen (die Listeners), und folgende drei Methoden:
addChangeListener(), removeChangeListener() und fireChangeUpdate(). Die ersten beiden sollte klar sein, die dritte ist dafür zuständig, das die Events tatsächlich versandt werden.

Code:
public class DataChangingOne {

    private Vector changeRecipients; // die Liste der Listener!
    private Vector importantVector; // der Vector, dessen Strukturänderungen weitergegeben werden!

    public DataChangingOne() {
        changeRecipients = new Vector();
        importantVector = new Vector();
    }

    public void addChangeListener(ChangeListener listener) {
        changeRecipients.add(listener);
    }

    public void removeChangeListener(ChangeListener listener) {
        changeRecipients.remove(listener);
    }

    public void fireChangeUpdate(ChangeEvent chEv) {
        Iterator recIt = changeRecipients.iterator();

        while(recIt.hasNext()) {
            ((ChangeListener)recIt.next()).changeHappened(chEv);
        }
    }

    public void addSomethingToImportantVector(Object object) {
        importantVector.add(object);

        fireChangeUpdate(new ChangeEvent(importantVector.indexOf(object), ChangeEvent.ADDED));
    }

// Denk dir noch ein paar Funktionen, die etwas mit importantVector anstellen...

}

Mit den Swing/AWT-Events funktioniert das genauso... Der Schlüssel ist die Methode fire...Update() und der Trick mit den Interface-Typen. Hoffe, dir geholfen zu haben.

mpG
Tobias

[Edit]Verdammt, nur zweiter ;) - wenn ich heute morgen nur nicht ne halbe Stunde zum Tippen gebraucht hätte...[/Edit]
 

kp007

Mitglied
Noch ein Letztes :

Was ist mit der Schnittstellen-Geschichte ?
Irgendwann muss doch der Button sagen : schickeEvent(Schnittstelle.tue_Etwas(Event)) - oder so ähnlich ?

Interessiere mich was das Programm während der Laufzeit alles macht, vor allem wie mit Events umgegangen wird. Könntet ihr mir Tipps geben, wo ich das nachlesen, ausprobieren oder „erfahren“ kann. Den Tipp mit dem Debugger gehe ich nach.


Thomas :

Danke für die Antwort, ich werde mir das mal in Ruhe durchlesen. Eine Winzigkeit, die ich beim Überfliegen nicht ganz verstanden habe

Code:
public void fireChangeUpdate(ChangeEvent chEv) { 
        recIt = changeRecipients.iterator(); 

        while(recIt.hasNext()) { 
            ((ChangeListener)recIt.next()).changeHappened(chEv); 
        } 
    }

Was ist dieses recIt und wo kommt es her ?

Liege ich mit meiner obigen Vermutung (Schnittstellen) richtig oder muss ich da „anders“ an die Sache rangehen ?
 

Illuvatar

Top Contributor
Ich vermute mal, Tobias hat einfach nur ein "Iterator" vor dem recIt vergessen.

Der Button macht vermutlich processActionEvent, in welcher Methode wahrscheinlich in jedem hinzugefügten ActionListener actionPerformed aufgerufen wird.
 

Tobias

Top Contributor
Illuvatar hat recht, ich habe das Iterator vergessen. recIt ist der Iterator über den Vector changeRecipients.

Der Button tut genau das, was meine Klassen auch tun - das Äquivalent zu fireChangeUpdate() ausführen, was allen registrierten Listenern das Event schickt.

mpG
Tobias
 

Tobias

Top Contributor
Es dauert, bis es in "Fleisch und Blut" übergeht

Sorry, wenn ich das Verstehen mit englischen Variablen- und Methodennamen verlangsamt haben sollte - aber ich hasse Deutsch-Englisch-Gemisch-Code, der nur für einen Inländer leichter zu verstehen ist... Briefe schreibe ich ja auch nicht gemischt ;)...

mpG
Tobias
 

kp007

Mitglied
@tobias

Ich hätte noch eine letzte Frage zum Event-Handling.

Du hast in deinem Interface ChangeListener nur eine Methode, nämlich changeHappened(ChangeEvent).

Wie sähe der komplette Code aus, wenn du mehr als eine Methode (im Interface) hättest.

Bitte, mach dir nochmal die Mühe

Danke
 

kp007

Mitglied
von Tobias :

Im Interface sind die Methoden definiert, die ein Objekt, dass auf Änderungen reagieren will implementieren muss. In unserem Beispiel könnte so ein Objekt ja zum Beispiel für jeden Änderungstyp eine eigene Methode implementieren. Dann sieht das ganze wie folgt aus:

Das Interface:

Code:
public interface ChangeListener { 
    public abstract deleted(ChangeEvent e); 
    public abstract added(ChangeEvent e); 
    public abstract resorted(ChangeEvent e); 
}

Das ChangeEvent-Objekt:
Code:
public ChangeEvent { 

    int index; 

    public ChangeEvent(int index) { 
        this.type = type; 
    } 

    public int getIndex() { 
        return index; 
    } 
}

Das eventproduzierende Objekt:
Code:
public class DataChangingOne { 

    public static final int ADDED = 1; 
    public static final int REMOVED = 2; 
    public static final int RESORTED = 3; 

    private Vector changeRecipients; // die Liste der Listener! 
    private Vector importantVector; // der Vector, dessen Strukturänderungen weitergegeben werden! 

    public DataChangingOne() { 
        changeRecipients = new Vector(); 
        importantVector = new Vector(); 
    } 

    public void addChangeListener(ChangeListener listener) { 
        changeRecipients.add(listener); 
    } 

    public void removeChangeListener(ChangeListener listener) { 
        changeRecipients.remove(listener); 
    } 

    public void fireChangeUpdate(ChangeEvent chEv, int type) { 
        Iterator recIt = changeRecipients.iterator(); 

        while(recIt.hasNext()) { 
            if(type == ADDED) { 
                ((ChangeListener)recIt.next()).added(chEv); 
            } 
            if(type == REMOVED) { 
                ((ChangeListener)recIt.next()).removed(chEv); 
            } 
            if(type == RESORTED) { 
                ((ChangeListener)resIt.next()).resorted(chEv); 
            } 
        } 
    } 

    public void addSomethingToImportantVector(Object object) { 
        importantVector.add(object); 

        fireChangeUpdate(new ChangeEvent(importantVector.indexOf(object), ADDED); 
    } 

    public void resortImportantVector() { 
        // resort 
        
        fireChangeUpdate(new ChangeEvent(-1), RESORTED); 
    } 

// Denk dir noch ein paar Funktionen, die etwas mit importantVector anstellen... 

}

Im Wesentlichen handelt es sich um eine Verlagerung der Arbeit aus dem Event-Objekt in das Sende-Objekt. Das hat gewisse Vorteile, aber eben auch ein paar Nachteile. Zu den Vorteilen gehört bestimmt, das ein Listener jetzt feiner bestimmen kann, auf welche Events er reagiert - er muss zwar alle Methoden des Interfaces implementieren, aber die Methoden für Events, die ihn nicht interessieren, läßt er einfach leer.
Nachteil ist das Durchhalten von Standards (zum Beispiel Index = -1 bei RESORTED). Diese Konvention durchzusetzen wird jetzt nämlich Bestandteil des sendenden Objekts, die aber unte Umständen von verschiedenen Programmierern hergestellt werden - und Konventionen sollte man möglichst im Code durchsetzen und nicht durch eher unverbindliche "Absprachen" in der Dokumentation, an die sich am Ende eh keiner hält.
Im Endeffekt sind das aber eher philosophische Vor- und Nachteile - die reine Implementation funktioniert genauso wie bei einer reagierenden Methode. Ich empfehle dir, dir über folgendes Thema weitere Informationen zu besorgen:

-Interfacetypen (Objekte können über ihre Interfaces typisiert werden - meist bei Kapitel über Vererbung zu finden),
z.B. bei www.javabuch.de

mpG
Tobias

(...)

_________________
Freies Mitglied der Volksfront von Judäa[/code]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
D Event Handling in Komplexen Anwendungen AWT, Swing, JavaFX & SWT 9
F Event Handling AWT, Swing, JavaFX & SWT 7
N Java Swing Event Handling AWT, Swing, JavaFX & SWT 7
R pint methode und event handling AWT, Swing, JavaFX & SWT 3
D Trennung des Event-Handling von der GUI AWT, Swing, JavaFX & SWT 4
L Event-handling, MouseListener AWT, Swing, JavaFX & SWT 5
Juelin in javafx Event auslösen AWT, Swing, JavaFX & SWT 4
G Mouse Event in anderemm Event auslösen AWT, Swing, JavaFX & SWT 50
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
izoards Java FX Window Event SHOWING AWT, Swing, JavaFX & SWT 17
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
J CheckBoxListCell auf click event in listView reagieren AWT, Swing, JavaFX & SWT 1
W JavaFX Etwas Tabellenartiges + Cell-Content-Changed-Event (o.ä.) AWT, Swing, JavaFX & SWT 30
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
B Swing Windowbuilder Rückgabewert im Event AWT, Swing, JavaFX & SWT 3
Z Befehl Action Event Verlassen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
K Event Handling ComboBox Event Handler AWT, Swing, JavaFX & SWT 7
Sugan Swipe Event? AWT, Swing, JavaFX & SWT 8
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
H Event Handling JavaFx - auf Event warten AWT, Swing, JavaFX & SWT 4
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
M Swing OnLoad-Event o. Ä. AWT, Swing, JavaFX & SWT 3
D Event Handling "Plötzlich" kein mouseMoved-Event AWT, Swing, JavaFX & SWT 2
A Minimalestopuhr: JLabel.setText() durch eigenes Event ändern AWT, Swing, JavaFX & SWT 6
J Swing JMenuItem-Event?? AWT, Swing, JavaFX & SWT 3
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3
A Mouse event und exit on close AWT, Swing, JavaFX & SWT 11
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
J Button Event nur einmal ausführen AWT, Swing, JavaFX & SWT 3
S SWT Shell durch Event in der Größe verändern AWT, Swing, JavaFX & SWT 7
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
T Callback vs. Event listener AWT, Swing, JavaFX & SWT 7
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
T Anzahl Event Listeners AWT, Swing, JavaFX & SWT 4
A Swing JButton int im Event AWT, Swing, JavaFX & SWT 9
G Swing Onkeyup Event AWT, Swing, JavaFX & SWT 3
P Action Event abfangen etwas anders? AWT, Swing, JavaFX & SWT 2
3 Swing NullPointerException in AW Event-0? AWT, Swing, JavaFX & SWT 5
F Swing Auf JComboBox-Event erst NACH Auswahl reagieren AWT, Swing, JavaFX & SWT 8
P Swing Event das ausgelöst wird, sobald Änderung der Größe Abgeschlossen ist AWT, Swing, JavaFX & SWT 4
A Shift-Tab-Event auslösen AWT, Swing, JavaFX & SWT 5
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
W Swing Event bei Schließen des Fensters AWT, Swing, JavaFX & SWT 6
A Probleme mit dem KeyReleased-event AWT, Swing, JavaFX & SWT 3
J Doppelklick Event AWT, Swing, JavaFX & SWT 32
jueki Event bei Änderung der Spaltenbreite in einem JTable AWT, Swing, JavaFX & SWT 15
D jtabbedpane Event VOR tab-Wechsel AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Event Problem AWT, Swing, JavaFX & SWT 5
M JTree => Event Dispatching Error AWT, Swing, JavaFX & SWT 2
D Event in Fenster ausgeben + Observer + kein Plan AWT, Swing, JavaFX & SWT 2
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
H KeyUp-Event/Ereignis AWT, Swing, JavaFX & SWT 6
C Event Frage AWT, Swing, JavaFX & SWT 7
M Swing WindowListener -> Event abbrechen? AWT, Swing, JavaFX & SWT 2
K JToggleButton deaktivieren (komplettes event nehmen) AWT, Swing, JavaFX & SWT 2
R JTextField - Event bei jedem Buchstaben AWT, Swing, JavaFX & SWT 2
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
M Actionlistener ohne Event -.-?! AWT, Swing, JavaFX & SWT 2
O Probleme beim Zeichnen und AWT-Event-Queue-0 Exception AWT, Swing, JavaFX & SWT 5
D PropertyChangeListener Event auswertung AWT, Swing, JavaFX & SWT 7
O FlowLayout Button Event zuweisen? AWT, Swing, JavaFX & SWT 7
J remove() components bei event von JComboBox AWT, Swing, JavaFX & SWT 2
I event AWT, Swing, JavaFX & SWT 6
G Swing JFileChooser Event für neue Directory? AWT, Swing, JavaFX & SWT 5
X Checkboxen erstellt mit MouseClicked event AWT, Swing, JavaFX & SWT 10
Dragonfire Swing One componentResized Event AWT, Swing, JavaFX & SWT 14
data89 Was mache ich mit "Dispatched Event Thread"/Substance falsch? AWT, Swing, JavaFX & SWT 4
Kr0e Event simulieren AWT, Swing, JavaFX & SWT 5
S Tastatur Event auserhalb des fokuses aufnehmen AWT, Swing, JavaFX & SWT 4
R Swing ComboBox und doppelter Event!? AWT, Swing, JavaFX & SWT 10
M Swing Event mit Button AWT, Swing, JavaFX & SWT 7
B Wie kann ich ein event wieder beseitigen AWT, Swing, JavaFX & SWT 2
R Checkboxen - Event mit Controller abfangen AWT, Swing, JavaFX & SWT 7
Spin Window Event Beispiel AWT, Swing, JavaFX & SWT 6
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
Iron Monkey JTable 2 Selektionsfarben Mouse-Event AWT, Swing, JavaFX & SWT 8
Dragonfire JTree, Selection via event AWT, Swing, JavaFX & SWT 7
K JButton auf JPanel in JTable (Darstellungs-/Event-Probleme) AWT, Swing, JavaFX & SWT 16
B JInternalFrame resize event AWT, Swing, JavaFX & SWT 2
E Komponenten in Event Dispatch Thread erzeugen? AWT, Swing, JavaFX & SWT 4
D Event beim Laden eines JPanels? AWT, Swing, JavaFX & SWT 3
O Action Event auslösen bei unbekanntem JTextField AWT, Swing, JavaFX & SWT 3
R Registrieren um Event abzufangen AWT, Swing, JavaFX & SWT 3
N solange Maustaste gedrückt Event AWT, Swing, JavaFX & SWT 15
Daniel_L Nachrichten/Event aus nicht-modalen Dialogen abfragen? AWT, Swing, JavaFX & SWT 4
G Event an einer JComboBox registrieren AWT, Swing, JavaFX & SWT 8
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
A Event von Login zu Main klasse AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben