Ereignisbehandlung, ActionListener, ActionEvent

killabeez

Mitglied
Das hier ist ein kleines Programm, indem man zwei Operanden eingeben kann, und drückt man auf eine Grundrechenart, plus, minus, mal, geteilt erscheint die Lösung.
Das Ziel ist es die Ereignisbehandlung für alle JButtons auf einer anderen Klasse zu erstellen, nämlich in einer Klasse OperatorListener welches ActionListener implementiert.

Ich habe eine Lösung, in der eine innere Klasse benutzt wird. Jetzt wollte ich das gleiche ohne eine innere Klasse, sondern mit einer normalen Klasse lösen. Ist das möglich, ohne in der Klasse RechenFrame Änderungen vorzunehmen (Beispiel getter) ? Mich interessiert es aus Übungszwecken, wie ich das auch anderst lösen könnte.
Wäre eine Lösung auch möglich in dem OperatorListener von RechenFrame erbt? Habe keine andere Lösung hinbekommen die funktioniert.

Freue mich auf euere Ideen.

Hier nur die Klasse RechenFrame:
Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class RechenFrame extends JFrame {

	private static final long serialVersionUID = 3211418102894914613L;
	private JTextField operand1, operand2;
	private JButton plus, minus, mal, geteilt;
	private JLabel ergLabel;

	public RechenFrame() {

		setLayout(new GridLayout(0, 4));
		add(new JLabel("Operand 1:", JLabel.RIGHT));

		operand1 = new JTextField(4);
		add(operand1);

		add(new JLabel("Operand 2:", JLabel.RIGHT));
		operand2 = new JTextField(4);
		add(operand2);
		add(plus = new JButton("+"));
		plus.addActionListener(new OperatorListener('+'));
		add(minus = new JButton("-"));
		minus.addActionListener(new OperatorListener('-'));
		add(mal = new JButton("*"));
		mal.addActionListener(new OperatorListener('*'));
		add(geteilt = new JButton("/"));
		geteilt.addActionListener(new OperatorListener('/'));

		add(new JLabel("Ergebnis: ", JLabel.RIGHT));
		add(ergLabel = new JLabel(""));
		ergLabel.setOpaque(true);
		ergLabel.setBackground(Color.WHITE);
	}

	public static void main(String[] args) {
		RechenFrame Rechenfenster = new RechenFrame();
		Rechenfenster.setTitle("RechenFrame");
		Rechenfenster.setSize(300, 100);
		Rechenfenster.setVisible(true);
		Rechenfenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

}

Hier die Lösung mit der inneren Klasse OperatorListener:
Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class RechenFrame extends JFrame {

	private static final long serialVersionUID = 3211418102894914613L;
	private JTextField operand1, operand2;
	private JButton plus, minus, mal, geteilt;
	private JLabel ergLabel;

	public RechenFrame() {

		setLayout(new GridLayout(0, 4));
		add(new JLabel("Operand 1:", JLabel.RIGHT));

		operand1 = new JTextField(4);
		add(operand1);

		add(new JLabel("Operand 2:", JLabel.RIGHT));
		operand2 = new JTextField(4);
		add(operand2);
		add(plus = new JButton("+"));
		plus.addActionListener(new OperatorListener('+'));
		add(minus = new JButton("-"));
		minus.addActionListener(new OperatorListener('-'));
		add(mal = new JButton("*"));
		mal.addActionListener(new OperatorListener('*'));
		add(geteilt = new JButton("/"));
		geteilt.addActionListener(new OperatorListener('/'));

		add(new JLabel("Ergebnis: ", JLabel.RIGHT));
		add(ergLabel = new JLabel(""));
		ergLabel.setOpaque(true);
		ergLabel.setBackground(Color.WHITE);
	}
	
	class OperatorListener implements ActionListener {
		char oper;

		OperatorListener(char oper) {
			this.oper = oper;
		}

		public void actionPerformed(ActionEvent e) {
			try {
				double op1 = Double.valueOf(operand1.getText()).doubleValue();
				double op2 = Double.valueOf(operand2.getText()).doubleValue();
				double erg;
				if (oper == '+')
					erg = op1 + op2;
				else if (oper == '-')
					erg = op1 - op2;
				else if (oper == '*')
					erg = op1 * op2;
				else
					erg = op1 / op2;
				ergLabel.setText("" + erg);
			} catch (Exception ex) {
				ergLabel.setText("Unzulaessige Eingabe!");
			}
		}
	}

	public static void main(String[] args) {
		RechenFrame Rechenfenster = new RechenFrame();
		Rechenfenster.setTitle("RechenFrame");
		Rechenfenster.setSize(300, 100);
		Rechenfenster.setVisible(true);
		Rechenfenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

}
 

javampir

Bekanntes Mitglied
hi,
man könnte es mit einer minimalen änderung machen: du machst die JButtons public. dann kannst du aus einer anderen klasse auf sie zugreifen
javampir
 

Harry Kane

Top Contributor
hi,
man könnte es mit einer minimalen änderung machen: du machst die JButtons public. dann kannst du aus einer anderen klasse auf sie zugreifen
Und am besten auch noch static, damit auch die Objekte auf die Buttons zugreifen können, die keine Referenz auf eine RechenFrame Instanz haben?
Nenene, so nich:noe:
Mein Vorschlag: Du übergibst dem OperatorListener Referenzen auf operand1, operand2 und ergLabel. Dann kannst du in der actionPerformed darauf zugreifen, ohne eine Referenz auf die komplette Rechenframe-Klasse halten zu müssen.
 

javampir

Bekanntes Mitglied
also, ich finde das ja schon sinnig. wenn ich beispielsweise einen dialog in eine eigene klasse auslagere oder so was dann habe ich sowieso eine instanz in der tatsächlichen gui. dann kann man das wunderbar machen.
von static war nie die rede, das wäre natürlich blödsinn
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
N Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
A Verständnisfrage zur Ereignisbehandlung AWT, Swing, JavaFX & SWT 5
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
L actionListener für Button AWT, Swing, JavaFX & SWT 97
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
R ActionListener in Actionlistener AWT, Swing, JavaFX & SWT 6
S Swing Variable in Actionlistener aufrufen AWT, Swing, JavaFX & SWT 10
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
coolian ActionListener funktonirt nicht richtig auf JMenuItem AWT, Swing, JavaFX & SWT 4
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
Blender3D einzelner ActionListener vs anonyme ActionListener AWT, Swing, JavaFX & SWT 10
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16
J ActionListener bei Buttons AWT, Swing, JavaFX & SWT 14
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z ActionListener Variable übergeben AWT, Swing, JavaFX & SWT 12
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
S While Schleife im Actionlistener AWT, Swing, JavaFX & SWT 1
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
P ActionListener Graphics Einbauen AWT, Swing, JavaFX & SWT 0
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
Liondary GUI - ActionListener AWT, Swing, JavaFX & SWT 7
J ActionListener erkennt Variable nicht AWT, Swing, JavaFX & SWT 6
E ActionListener führt falsche Funktion aus AWT, Swing, JavaFX & SWT 6
Sin137 ActionListener in MVC AWT, Swing, JavaFX & SWT 7
M ActionListener und mathematische Methoden AWT, Swing, JavaFX & SWT 13
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 ActionListener Variablen AWT, Swing, JavaFX & SWT 13
Y ActionListener AWT, Swing, JavaFX & SWT 2
A Gui für Vokabeltrainer (ActionListener) AWT, Swing, JavaFX & SWT 14
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
J Event Handling JOptionPane ActionListener setzen. AWT, Swing, JavaFX & SWT 3
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
R Swing Problem: IOException bei ActionListener AWT, Swing, JavaFX & SWT 1
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
T Einfaches Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
K GUI, Button, ActionListener - ein paar Einsteigerprobleme AWT, Swing, JavaFX & SWT 1
W Verschachtelter ActionListener AWT, Swing, JavaFX & SWT 0
N gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
K Swing JMenu und ActionListener AWT, Swing, JavaFX & SWT 4
A Swing ActionListener AWT, Swing, JavaFX & SWT 8
V ActionListener Abhängigkeitenproblem AWT, Swing, JavaFX & SWT 6
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
J ActionListener für Buttons AWT, Swing, JavaFX & SWT 3
M Event Handling ActionListener übergeben ich checks net AWT, Swing, JavaFX & SWT 4
C Swing ComboBox - ActionListener deaktivieren AWT, Swing, JavaFX & SWT 2
S Button (ActionListener) funktioniert nicht, wenn y-Koordinate verändert wird AWT, Swing, JavaFX & SWT 5
L Swing ActionListener führt seine Aufgabe nur teilweise aus. AWT, Swing, JavaFX & SWT 7
A Swing ActionListener kann nicht hinzugefügt werden AWT, Swing, JavaFX & SWT 4
P Actionlistener - 3 klassen - kompliziert - auf methoden zugreifen AWT, Swing, JavaFX & SWT 3
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
D AWT eigenem Knopf ActionListener zuweisen AWT, Swing, JavaFX & SWT 24
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
J ActionListener per Innere Klasse oder e.getActionCommand() if-Abfrage? AWT, Swing, JavaFX & SWT 12
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
P Swing Seltsames ActionListener-Verhalten AWT, Swing, JavaFX & SWT 7
Oliver530 ActionListener von eigener ButtonKlasse AWT, Swing, JavaFX & SWT 16
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 2
Kenan89 statischer ActionListener keine Wirkung? AWT, Swing, JavaFX & SWT 3
C In der Schleife ActionListener aktivieren AWT, Swing, JavaFX & SWT 3
B Swing Problem beim ActionListener AWT, Swing, JavaFX & SWT 5
P Swing JPanel mit ActionListener mehrfach verwenden AWT, Swing, JavaFX & SWT 8
1 ActionEvent generieren und an ActionListener weiterleiten AWT, Swing, JavaFX & SWT 12
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
N JCombobox und Actionlistener Aktion nur ausführen, wenn Useraktion ihn auslöst AWT, Swing, JavaFX & SWT 4
N Componente und Actionlistener AWT, Swing, JavaFX & SWT 5
C ActionListener AWT, Swing, JavaFX & SWT 6
Corben ActionListener Error AWT, Swing, JavaFX & SWT 2
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
I Swing Problem mit InputMap bei JButton (ActionListener) AWT, Swing, JavaFX & SWT 3
S Swing JButton mit ActionListener innerhalb einer JTable AWT, Swing, JavaFX & SWT 4
P Variablen in einem ActionListener zurücksetzen AWT, Swing, JavaFX & SWT 6
M AWT Problem mit ActionListener AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
S ActionListener "nach oben weitergeben" AWT, Swing, JavaFX & SWT 10
M Anonymer ActionListener AWT, Swing, JavaFX & SWT 4
L SWT Actionlistener Combobox öffnen AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben