OOP Action Listening und MVC-Modell

Wirbelwind

Mitglied
Hey,

bin zwar noch neu auf dem JAVA-Gebiet, aber versuche gleich von Anfang an möglichst viel richtig zu machen, damit sich nicht allzu viele Fehler einschleichen. Dazu gehört auch das MVC-Modell.

Nun habe ich ein schönes Buch, dass GUI und Programmlogik in eine Klasse packt... das scheint mir unschön, da man doch immer von Trennung GUI und Programmlogik spricht. Konkret habe ich mit Hilfe des Buches eine kleine Klasse geschrieben, die sowohl GUI- als auch ActionListining enthält. Es geht um ein Kunden/Adress-Verwaltungsprogramm zum üben.


Java:
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;



public class MandantenEintragen extends JFrame implements ActionListener{

	String MySQL_Request;
	ResultSet Result;
	int CResult;
	
	//Gui-Eingabe
	JButton JSave = new JButton("Speichern");
	JButton JAddPartnerFunction = new JButton("Hinzufügen");
	JButton JDeletePartnerFunction = new JButton("Löschen");
	
	
	JTextField JNr = new JTextField("",12);
	JTextField JName = new JTextField("",12);
	JTextField JStreet = new JTextField("",12);
	JTextField JPLZ = new JTextField("",12);
	
	JLabel JLabelPartnerFunction = new JLabel("Ansprechpartner: ");
	
	JTextField JNewPartner = new JTextField("",12);
	JTextField JNewFunction = new JTextField("",12);

	
/*	JTextField JShareholder = new JTextField("",12);
	JTextField JHR = new JTextField("",12);
	JTextField JIndustry = new JTextField("",12);*/
	
	//Gui-Bezeichner
	
	JLabel JLabelNr = new JLabel("Kundennnummer");
	JLabel JLabelName = new JLabel("Firma");
	JLabel JLabelStreet = new JLabel("Straße/Nr");
	JLabel JLabelPLZ = new JLabel("PLZ");
	
	JLabel JLabelNewPartner = new JLabel("Firma");
	JLabel JLabelNewFunction = new JLabel("Straße/Nr");
	
	

	
	
	
	
	
	JPanel Block1 = new JPanel();
	JPanel Block2 = new JPanel();
	JPanel Block3 = new JPanel();
	JPanel Block4 = new JPanel();
	JPanel Block5 = new JPanel();
	JPanel Block6 = new JPanel();
	JPanel Block7 = new JPanel();
	

	Box OutputBlock = new Box(BoxLayout.Y_AXIS);
	
	
	public MandantenEintragen(){
		
		
		//Gui aufbauen: Layout-Manager
		
		
		Block1.setLayout(new FlowLayout(FlowLayout.LEFT));
		Block2.setLayout(new FlowLayout(FlowLayout.LEFT));
		Block3.setLayout(new FlowLayout(FlowLayout.LEFT));
		Block4.setLayout(new FlowLayout(FlowLayout.LEFT));
		Block5.setLayout(new FlowLayout(FlowLayout.RIGHT));
		Block6.setLayout(new FlowLayout(FlowLayout.RIGHT));

		
		this.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		//Gui aufbauen: Anordnen
		
		Block1.add(JLabelNr);
		Block1.add(JNr);
		Block1.add(JLabelName);
		Block1.add(JName);
	
		Block2.add(JLabelStreet);
		Block2.add(JStreet);
		Block2.add(JLabelPLZ);
		Block2.add(JPLZ);
		
		Block3.add(JLabelNewPartner);
		Block3.add(JNewPartner);
		Block3.add(JLabelNewFunction);
		Block3.add(JNewFunction);

		Block4.add(JLabelPartnerFunction);
		
		Block5.add(JAddPartnerFunction);
		Block5.add(JDeletePartnerFunction);
		
		Block6.add(JSave);
		
	
		//Der Main-GUI zuordnen
		
		OutputBlock.add(Block1);
		OutputBlock.add(Block2);
		OutputBlock.add(Block3);
		OutputBlock.add(Block4);
		OutputBlock.add(Block5);
		OutputBlock.add(Block6);

		this.add(OutputBlock);
		
		this.setVisible(true);
		pack();
		

		
		//ActionListener hinzufügen
		
		JSave.addActionListener(this);
		
		
		
		
		//ActionListener abrufen
		
	}
	

	
	
	//================= ACTION LISTENING ==========================\\
		
		public void actionPerformed(ActionEvent evt){
			
			if (evt.getSource() == JSave) {
				
				try{
					int Status;
					
					//Eigenschaften des Kunden abfragen und in Variablen schreiben
					
					String Nr = this.JNr.getText();
					String Name = this.JName.getText();
					String Street = this.JStreet.getText();
					String PLZ = this.JPLZ.getText();
					String NewPartner = this.JNewPartner.getText();
					String NewFunction = this.JNewFunction.getText();
					
					Database Db = new Database();
					
					MySQL_Request = "[DATENBANKANWEISUNG]"; 
					Status = Db.CRequest(MySQL_Request);
				}
				catch(Exception ex){
					System.out.println(ex);
					
					
				}

Db.CRequest ist dabei eine Methode, um in die Db zu schreiben.


Nun habe ich dazu folgende Fragen:

1. ActionListener(this) verweist auf dasselbe Objekt. Geht das nicht auch eleganter? Dann habe ich ja gerade eine Mischung von Code (Variablenbelegung, DatenbankRequest, DatenbankAbfrage) in ein und derselben Klasse. Bisher wäre mir nur eingefallen eine neue Klasse zu schreiben, sie an der Stelle zu instantiieren und ihr die ganzen Strings zu übergeben. Aber das ist doch auch ziemlich umständlich und ich hätte nach wie vor den ActionPerformed-Teil in dieser Klasse. Ist das noch OOP-konform?

2. Jemand sagte mir, dass er ActionListener grundsätzlich anonym implementiert. Ich verstehe aber nicht ganz, welche Vorteile das bringen soll oder wie ich mir das vorzustellen habe. Habe schon danach gegoogelt, aber fand die Beschreibungen eher mäßig bis unverständlich.

Wäre toll, wenn jemand etwas Licht ins Dunkel brächte!

Viele Grüße,
Wiwi
 

Camill

Bekanntes Mitglied
1. ActionListener(this) verweist auf dasselbe Objekt. Geht das nicht auch eleganter? Dann habe ich ja gerade eine Mischung von Code (Variablenbelegung, DatenbankRequest, DatenbankAbfrage) in ein und derselben Klasse. Bisher wäre mir nur eingefallen eine neue Klasse zu schreiben, sie an der Stelle zu instantiieren und ihr die ganzen Strings zu übergeben. Aber das ist doch auch ziemlich umständlich und ich hätte nach wie vor den ActionPerformed-Teil in dieser Klasse. Ist das noch OOP-konform?
Nach MVC ist der Controller dafür zuständig zu entscheiden was bei bestimmten Aktionen des Users passieren soll.
Somit könntest du entweder den ActionListener in der View Implementieren(wie es bereits jetzt ist), jedoch bei einem Event die zugehörige Methode im Controller aufrufen.
Bsp.:
Java:
public void actionPerformed(ActionEvent evt){
	if (evt.getSource() == JSave) {
		controller.save();
	}
}
Oder du Implementierst den ActionListener direkt im Controller, dann müsstest du lediglich den einzelnen Komponenten mitteilen das der Controller als Listener für diese zuständig ist.
Bsp.:
Java:
	JSave.addActionListener(controller);

2. Jemand sagte mir, dass er ActionListener grundsätzlich anonym implementiert. Ich verstehe aber nicht ganz, welche Vorteile das bringen soll oder wie ich mir das vorzustellen habe. Habe schon danach gegoogelt, aber fand die Beschreibungen eher mäßig bis unverständlich.
Einen ActionListener kannst du anonym zb. so an einen Button anhängen:
Java:
button.addActionListener(new ActionListener() {
	@Override
	public void actionPerformed(ActionEvent e) {
		doSomething();
	}
});
Bei Vor-/Nachteilen kann ich dir nicht Helfen da ich selber nie anonyme Klassen verwende. Ein Vorteil den ich sehe wäre evt. die Sichtbarkeit bestimmter Variablen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
CptK Interface JTextField: Action mit Enter ausführen Java Basics - Anfänger-Themen 16
D Java Action abkürzen Java Basics - Anfänger-Themen 9
M Action Event auf Textfield legen Java Basics - Anfänger-Themen 18
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
M Compiler-Fehler Using action listener Java Basics - Anfänger-Themen 1
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
T Button Text mit Action Listener [Hilfe!] Java Basics - Anfänger-Themen 10
G Erste Schritte Action soll zwei sachen ausführen Java Basics - Anfänger-Themen 7
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
D Button action Event einblenden/ausblenden Java Basics - Anfänger-Themen 6
D Methoden aus Action Listenern aufrufen Java Basics - Anfänger-Themen 7
G textarea action Java Basics - Anfänger-Themen 5
N Variablen aus Action Listener lesen und weiterverarbeiten Java Basics - Anfänger-Themen 12
Devil0s while loop, Button action Java Basics - Anfänger-Themen 8
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
P ActionListener Action Event Java Basics - Anfänger-Themen 5
A action listener Java Basics - Anfänger-Themen 8
K Action Listener reagiert nicht auf Button druck mehr??? Java Basics - Anfänger-Themen 4
J Action Listener Java Basics - Anfänger-Themen 2
M Frage zur Methode Action.putValue(String,Object) Java Basics - Anfänger-Themen 5
S Action Listener Java Basics - Anfänger-Themen 6
M Action als neue Klasse Java Basics - Anfänger-Themen 2
Developer_X Action über rotes X in der Eke eines JFrames entscheiden. Java Basics - Anfänger-Themen 15
S Action Listener Funktioniert nicht Java Basics - Anfänger-Themen 6
G Button Action Event starten Java Basics - Anfänger-Themen 4
G Nicht benannte Buttons - Wenn gedrückt > Action Java Basics - Anfänger-Themen 24
G Frage zur Action? Java Basics - Anfänger-Themen 4
G nach action Script aufrufen Java Basics - Anfänger-Themen 3
D problem mit einem action Java Basics - Anfänger-Themen 6
E Action und Accelerator Java Basics - Anfänger-Themen 2
S Problem mit Action Listener Java Basics - Anfänger-Themen 7
M Fehler im Action Listener Java Basics - Anfänger-Themen 9
megachucky Action-/Change Listener funktionieren nicht. Java Basics - Anfänger-Themen 2
G Auswahl in DropDown feldern in JSP seiten als Action Aufruf Java Basics - Anfänger-Themen 2
C Frage bzgl. action von Button Java Basics - Anfänger-Themen 6
B Oberflaecheprog einfaches beispiel (button action listener) Java Basics - Anfänger-Themen 5
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
K Hamstersimulator / Hamster Modell Lösungen gesucht Java Basics - Anfänger-Themen 3
A größeres MVC-Modell Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben