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.
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
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