ButtonEvents an Objekte schicken

Status
Nicht offen für weitere Antworten.

Actionhank

Mitglied
Hallo,

ich baue, wie wahrscheinlich viele vor mir, einen Taschenrechner. Nun bin ich schon relativ weit gekommen aber an dieser Stelle hakt's:

Ich will eine Komponente hinzufügen, die alles anzeigt, was bereits eingetippt wurde. Das ist einfach ein neues Fenster, das ein Label enthält, wo die gesamte bisher eingetippte Funktion dargestellt wird. Ich starte also aus dem Hauptprogramm bei entsprechendem Menuklick ein Fenster, dass nun auf die events der gedrückten Tasten (Buttons) hören soll. Der Taschenrechner ist als "Model View Controller" designt. Das Problem ist, dass die Buttons in einer anderen Klasse definiert sind (nämlich im Controller) und dort auch ihre Actionlistener gewissermaßer behandelt werden. Nun will ich aber, dass die Fenster-Klasse auch auf die Buttons hört und diese (parallel) behandeln kann(ist also im Prinzip ihr eigener Controller).
Kann ich den Button noch mehr Listener aufbrummen - das wäre eine Notlösung.
Ich sollte dabei vielleicht noch erwähnen, dass möglichst ohne großartige Abhängigkeiten der beschriebenen Klassen arbeiten will, da es sich bei dem zusätzlich anklickbaren Fenster um eine separate Komponente handeln soll.


hier ein Auszug aus der Klasse mit den Buttons:

Code:
//Konstruktor:
public Controller ( Applet a, View v, Model m ) {

    applet = a;
    view = v;
    model = m;

    applet.add("Center", new Keypad( digitLabels, 4, 3,
	new DigitListener( )) );
    applet.add("East", new Keypad( binaryLabels, 4, 1,
	new BinaryListener( )) );
    applet.add("West", new Keypad( unaryLabels, 4, 1,
	new UnaryListener( )) );
    applet.add("South", new Keypad( equalLabels, 4, 2,
	new EqualsListener( )) );
}


class DigitListener implements ActionListener  {
      public void actionPerformed(ActionEvent event) {
          Button button  = (Button)event.getSource();
          model.pressDigit( button.getLabel() );
	  view.update( );
      }
}

class BinaryListener implements ActionListener  {
      public void actionPerformed(ActionEvent event) {
          Button button  = (Button)event.getSource();
          model.pressFctn( button.getLabel());
	  view.update( );
      }
}
die Klasse Keypad:

Code:
// Keypad.java

import java.applet.*;
import java.awt.*;
import java.awt.event.*;


class Keypad extends Panel {


public Keypad (String[] lbl, int rows, int cols,
	ActionListener listener) {
    super( );
    setLayout( new GridLayout(rows, cols, 2, 2));
    for (int i = 0; i < lbl.length; i++) {
	Button b = new Button(lbl[i]);
	b.addActionListener( listener );
	add( b );
    } // for
} // Konstructor

} // class Keypad


Wie verändere ich diese Geschichte so, dass auch völlig fremde Objekte auf die Buttons hören können?

Zusatzfrage: Wie kann man generell ein event "zerlegen", speziell, wie erkenne ich, ob ein event von einem Button stammt oder nicht?

Vielen Dank für die Mühe schon mal...
 

L-ectron-X

Gesperrter Benutzer
Also um so etwas wie eine Liste aller bisher gedrückten Tasten (und so was hast Du doch vor, oder?) auf dem Taschenrechner zu programmieren, würde ich nichts mit Events machen, die werden doch schon gefeuert, Du brauchst also nur noch irgendwo zu sammeln, was gedrückt/geklickt wurde. Dazu eignet sich ein Stack, vielleicht auch ein Vector am besten. Jedesmal, wenn auf eine Taste geklickt würde, wird ja ein Event gefeuert, in dessen Verarbeitungsmethode Du einfach dem Stack oder Vector den ausgelesenen Wert der Taste hinzufügst. Dazu schreibst Du einfach eine neue Klasse, die dies bewerkstelligt.

Um heraus zu bekommen, ob das Event von einem Button stammt, kannst Du folgendes machen:
Code:
public void actionPerformed(ActionEvent e) {
  Object o = e.getSource();
  if(o instanceof Button)
    //es wurde ein java.awt.Button geklickt

  if(o instanceof TextField)
    //es wurde in einem TextField die Enter-Taste gedrückt
}
oder
Code:
public void mouseClicked(MouseEvent e) {
  Object o = e.getSource();
  if(o instanceof Button)
    //es wurde ein java.awt.Button geklickt

  if(o instanceof Label)
    //es wurde ein java.awt.Label geklickt
}
Es kommt natürlich darauf an, an welchen Components Du die entsprechenden Listener registrierst.
 

Actionhank

Mitglied
Danke, für die schnelle Antwort.


Eine Liste, hmmm ja - so ähnlich - es soll einfach die gesamte logische Funktion darstellen, die eingegeben wurde - also auch korrigieren wenn man die 'C' - Taste drückt usw.
Also das mit dem Sammeln ist mir klar, aber ich will das nicht, wenn es nicht unbedingt sein muss, explizit in die Buttons schreiben (neue actionlistener hinzufügen) weil das dem modularen Design entgegenwirkt.
Meine Idee war es die bisher gedrückten Tasten in einem String zu speichern und diesen dann direkt in das Label zu packen. Ich wollte dazu auch keine neuen events irgendwo feuern sondern die existierenden benutzen, wenn das geht.
Die Klasse OverviewFrame erbt von Frame und hat lediglich ein Label. Bei einem ButtonEvent soll die gedrückte Taste mit (button).getLabel( ) auf den String gepackt werden. Um noch einmal die Frage zu präzisieren: Kann man innerhalb einer Java-Anwendung eigentlich alle Events abfangen, die irgendwo abgefeuert werden, also, kann man einen AllesListener schreiben?.


Danke in Voraus
 

L-ectron-X

Gesperrter Benutzer
Actionhank hat gesagt.:
Um noch einmal die Frage zu präzisieren: Kann man innerhalb einer Java-Anwendung eigentlich alle Events abfangen, die irgendwo abgefeuert werden, also, kann man einen AllesListener schreiben?
Wozu? Die Events, die gefeuert werden, kennst Du doch als Programmierer am besten. Du brauchst doch nicht auf Events lauschen, die vielleicht gar nicht gefeuert werden (könnten).
Du hast in Deiner Anwendung schon Listener, nutze die einfach. Fakt ist, Du musst wohl, um Dein Problem zu lösen, mit eigenen Objekten arbeiten. MVC hin oder her.
Ansonsten reden wir vielleicht aneinander vorbei. ???:L
 
B

bygones

Gast
ich glaube viele verstehen das Prinzip vom MVC falsch (vielleicht auch ich).

Ein Button der in der GUI ist IST KEIN TEIL DES CONTROLLERS ! Der Button is ein grafisches Element. Er reagiert auf eingabe der GUI und ist ein teil des Views.

Sobald der Button irgendwas im Bezug auf Model ebene ändert, dann sollte er den "Auftrag" an die Controller Ebene weitergeben !
 

L-ectron-X

Gesperrter Benutzer
@deathbyaclown: Du hast es nicht falsch verstanden. :wink:
In Java wird allerdings das so genannte Delgate-Modell für Swing verwendet, in dem View und Controller zusammen gelegt werden.
 

Actionhank

Mitglied
Nun gut, ich glaube auch, dass wir jetzt etwas aneinander vorbei reden. Ich kann selbstverständlich die events der Buttons behandeln, ich weiß ja auch wie die Listener heißen wo sie stehen usw. nur eben soll der Code dazu DORT nicht stehen, denn die hinzuzuladene Komponente soll nicht bekannt sein und unabhängig funktionieren.
Also: Wobei es bei diesem Taschenrechner geht, ist nicht die Funktionalität, sondern das Hinzuladen von Komponenten. Der Taschenrechner soll zwei Ausbaustufen haben: normal und wissenschaftlich, wobei man den wissenschaftlichen Teil dynamisch hinzuladen und auch wieder verschwinden lassen können soll. Die beschriebene Anzeige, wo die gesamte bisherige eingetippte Funktion steht, soll auch als hinzuladbare Klasse (das ist jetzt noch nicht so, aber es soll eben noch kommen) implementiert werden. Das bedeutet, dass die Buttons nicht 'wissen' DÜRFEN, wer alles zuhören wird und im Controller, wo die ActionListener, z.B. DigitListener stattfinden darf auch noch nichts von eventuell hinzuladbaren Komponenten wissen (also entsprechende Listener dürfen dort nicht stehen).

Es kann also sein (ich befürchte es), dass das überhaupt nicht geht, so wie ich mir das denke. Dann wäre die Programmieraufgabe so nur teilweise erfüllbar...


naja, werde wohl von meiner Architektur abrücken müssen...

danke aber für die fixen, fachlichen Antworten
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11
Orkanson Objekte und Klassen Java Basics - Anfänger-Themen 8
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Objekte-Fragen Java Basics - Anfänger-Themen 1
T Objekte in der Methode Java Basics - Anfänger-Themen 8
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
E Eine Instanzvariable und zwei Objekte Java Basics - Anfänger-Themen 14
N Objekte in ArrayList finden Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben