Code umbauen ?

Status
Nicht offen für weitere Antworten.
M

Manuela

Gast
Hallo
ich habe mir diesen Code geschrieben, und Frage mich wie ich diesen Code besser schreiben kann,
denn hier geht es noch mit den Feldern
später wenn ich meine Kunden anlegen will habe ich um die 40 Komponente (JTextField, JComboBox, JCheckBox)
und wenn ich da 40 mal call.set... schreiben muß sieht das ja nicht so gut aus.


Code:
   public void set_liefer_anlegen() { 
        try {
            
            c = Connector.getInstance().getConnection();
            java.lang.String sql = "{  ?  = call  liefer_anlegen (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) }";
            java.sql.CallableStatement call = c.prepareCall(sql);
            
           call.setString(2, this.jTF_fabrikat.getText());
           call.setString(3, this.jCBox_anrede.getSelectedItem().toString());
           call.setString(4, this.jTF_name1.getText());
           call.setString(5, this.jTF_name2.getText());
           call.setString(6, this.jTF_strasse.getText());
           call.setString(7, this.jTF_land.getText());
           call.setInt(8, Integer.parseInt(this.jTF_plz.getText()));               
           call.setString(9, this.jTF_ort.getText());
           call.setString(10, this.jTF_telefon.getText());
           call.setString(11, this.jTF_telefax.getText());
           call.setString(12, this.jTF_email.getText());
           call.setString(13, this.jTF_ansprechpartner.getText());
           call.setString(14, this.jTA_info.getText());
           call.setString(15, this.jTF_rabatt.getText());
           call.setBoolean(16, this.jCkBox_lang.isSelected());
           
                    
          call.executeUpdate();
          call.close();
        }
        catch (SQLException ex) {
            Logger.getLogger("global").log(Level.SEVERE, null, ex);
        }
    }


bin um jeden Tipp dankbar.

Gruß Manuela
 
S

SlaterB

Gast
wenn die GUI-Komponenten alle einzeln aufgeführt sind, dann ist es eben so, mehr als zwei solche Stellen pro 40er-GUI wirst du nicht haben, das ist schon ok

Alternative: dynamische GUIs, Arrays oder Listen von Feldern,
und Indexe/ Keys zur Unterscheidung der einzelnen Felder,

mit int-Konstanten:
public static int INDEX_FABRIKANT = 2;

und dann kann man da viel Code sparen,
z.B.
Code:
for (int i=0; i< MAX_INDEX; i++) {
   setzeFeld(call,i);
}

setzeFeld muss sich den Index anschauen um für ein paar bestimmte Indexe Boolen oder int statt standardmäßig String zu verwenden,

if (index == ...)
oder
if (inBooleanIndexArray(index)
oder ähnliches

statt i von 0 beginnen zu lassen, könntest du die Indexe in einem Index-Array sammeln,

generell sind Enums (Java 1.5) besser als statische Konstanten,
da kann man dann auch zusätzliche Informationen wie der Typ des Feldes speichern
->
if (index.isBooleanField())



hat alles seine Vor- aber auch Nachteile
 
M

Manuela

Gast
Hallo,

SlaterB
ich kann dir nicht so ganz folgen, oder ich verstehe nicht was du meinst.

ich habe auf einem JPanel meine Textfelder ,Comboboxen und Checkboxen.

könntest du mir anhand meines Codes zeigen wie das mit den enums geht.

Code:
   public enum lieferer {
        fabrikat,anrede,name1,name2,strasse,land,plz,ort,telefon,telefax,email,ansprechpartner,info,rabatt,lang;
    }

????

Gruß Manuela
 
S

SlaterB

Gast
genau, und nun musst du dich entscheiden, ob du die TextFelder in ein Array speichern willst (dann muss das alles recht durchgängig sein),
Code:
int size = lieferer.values().length()
array = new JTextField[size];

oder in eine Map<lieferer,JTextField>

for (lieferer l : lieferer.values()) {
  map.put(l,new JTextField());
}


später dann:

for (int i=0; i< size; i++) { 
   setzeFeld(call,i); // oder setzeFeld(call,array[i]); 
} 

oder

for (lieferer l : lieferer.values()) {
   setzeFeld(call,l); // oder setzeFeld(call,map.get(l)); 
}


für den normal Zugriff z.B.
array[lieferer.anrede].setText(newAnredeString);
bzw.
map.get(lieferer.anrede).setText(newAnredeString);

die Reihenfolge ist natürlich immer zu beachten,
wenn dein SQL zwingend eine andere Reihenfolge als die Enums hat, dann muss man umsortieren

genauso wenn die Textfelder in einer anderen Reihenfolge in die GUI eingefügt werden als in der Enum steht,

da kann man sich dann neue Arrays für neue Reihenfolgen definieren:
lieferer[]anzeige = {leiferer.a, lieferer.c, ..}
oder vielleicht noch andere lustige Sachen machen
 
G

Guest

Gast
Oder lege dir für jeden Typen von Daten (z.B. Kunde etc.) eine entsprechende Klasse an und übergebe diese
an die Methoden, die die JDBC-Funktionen ausführen. GUI von Persistenzschicht zu trennen, ist nie verkehrt,
selbst, wenn es auf den ersten Blick nach mehr Arbeit aussieht.
 
M

Manuela

Gast
hallo SlaterB,

jetzt habe ich aber noch ein problem das ich nicht verstehe,
meine Textfelder haben bestimmte bezeichnungen Beispiel : "jTF_fabrikat" jTF_ ... usw.. ;
muß ich nicht dem enum auf irgendeine Art und weise die noch zuweisen.

????

Gruß Manuela
 
S

SlaterB

Gast
das Ziel ist ja zum einem, dass jTF_fabrikat usw. wegfällt, dass du NUR ein Array oder eine Map mit den JTextField-Objekten hast,

sofern die GUI einigermaßen symmetrisch aufgebaut ist, kannst du dann auch beim Layout den Code drastisch zusammenkürzen (sehr schlecht bei automatischen GUI-Designern),
notfalls wie gesagt jeden individuellen Zugriff auf jTF_fabrikat durch array[lieferer.fabrikat] ersetzen

wenn du bei den einzelnen Variablen bleibst, dann verlierst du einen Teil der Dynamik,
dann musst du in wenigstens einem 40er Block die einzelnen Exemplarvariablen in das Array/ in die Map schreiben,

wäre noch ein Vorteil, falls du viele Codestellen hast, an denen alle 40 TextFelder durchlaufen werden,
wenn es nur 1 bis 2 sind und auch die GUI-Erstellung ein 400 Zeilen langer Code bleibt,
dann lasse es lieber so, wie anfangs gesagt,

bei deinen vielen Nachfragen muss man so oder so sagen,
dass das wahrscheinlich zu schwer für dich ist
 

Marco13

Top Contributor
Ich glaube, dass es nicht "zu schwer für dich" ist, sondern einfach nur "zu schwer". Oder so. Jedenfalls würde mir keine wirklich schöne, elegante Lösung einfallen. Das mit den Arrays wirkt auch irgendwie krampfig. Ehrlich gesagt finde ich die Lösung, die du ursprünglich gepostet hast, noch am einfachsten, übersichtlichsten und leichtesten wartbar. (Sie sollte aber nach Möglichkeit nur EIN mal im Code vorkommen).

Es müssen ja von verschiedenen Components verschiedene Typen geholt werden - ich wüßte nicht, wie man diese "Typ-Mappings" "allgemeingültiger" oder "schöner" lösen könnte, als sie explizit hinzuschreiben (das MUSS ja sowieso irgendwo gemacht werden...)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
comp_math Code snippets AWT, Swing, JavaFX & SWT 3
G JavaFX Code in neues Projekt übernehmen AWT, Swing, JavaFX & SWT 0
princess_sara1997 .jar Datei führt den Code nicht richtig aus AWT, Swing, JavaFX & SWT 19
S Ich bringe Code mit JavaFX unter Apache NetBeans IDE 12.6 nicht zum laufen. AWT, Swing, JavaFX & SWT 14
U Kann man den Code umschreiben? AWT, Swing, JavaFX & SWT 8
U Code doch nicht austauschbar in 2DGraphics AWT, Swing, JavaFX & SWT 2
K Bekomme (u.a) javafx.fxml.LoadException trotz "korrektem" Code AWT, Swing, JavaFX & SWT 8
M JavaFX kann man da noch was am code vereinfachen design technisch sieht nicht richtig aus... AWT, Swing, JavaFX & SWT 15
S ActionEvent Press Enter per Code auslösen AWT, Swing, JavaFX & SWT 22
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
L Verbindung von Code und JFrame AWT, Swing, JavaFX & SWT 4
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
T JavaFX Falscher Wert getLayoutBounds? + Tipps zum Code-Aufbau? AWT, Swing, JavaFX & SWT 8
S JavaFX JavaScript Code in WebView/WebEngine AWT, Swing, JavaFX & SWT 0
L JavaFX GUI mit JavaFX. Scene Builder source code? AWT, Swing, JavaFX & SWT 6
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
Ernesto95 JavaFX FXML vs. Java Code AWT, Swing, JavaFX & SWT 3
T Hilfe bei Code AWT, Swing, JavaFX & SWT 2
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
T Tab per Code wechseln? AWT, Swing, JavaFX & SWT 3
C Swing GUI extrem langsam - GUI-Code richtig ausführen AWT, Swing, JavaFX & SWT 1
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
N JOGL-Code != C OpenGL-Code? AWT, Swing, JavaFX & SWT 9
R Source-Code, Javadoc AWT, Swing, JavaFX & SWT 16
S NetBeans GUI Builder - Code-Platzierung AWT, Swing, JavaFX & SWT 3
J Sauberer Gui-Code? AWT, Swing, JavaFX & SWT 22
B Color String Code AWT, Swing, JavaFX & SWT 3
D JFreeChart - aktuelle code beispiele AWT, Swing, JavaFX & SWT 11
T Bei Klick Code ausführen AWT, Swing, JavaFX & SWT 17
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
B Swing Laden von serialisierten Objekten (invalid type code AC)) AWT, Swing, JavaFX & SWT 3
S Swing Scrollpanes: wie kann ich durch Java-Code an den "Anfang" scrollen AWT, Swing, JavaFX & SWT 8
J prinzipielles verständnis für Oberfläche/Code-trennung AWT, Swing, JavaFX & SWT 5
A Applet Applet aus Code neu starten AWT, Swing, JavaFX & SWT 2
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
M JFileChooser setCurrentDirectory() - Verzeichnis relativ zum Code/binary AWT, Swing, JavaFX & SWT 14
L ListSelectionListener durch Code auslösen AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Warum funktioniert dieser Code ? (GUI) AWT, Swing, JavaFX & SWT 9
M ActionListener mit code!!! auslösen AWT, Swing, JavaFX & SWT 3
hdi SWT Shell: Auslagerung von Code verändert Verhalten AWT, Swing, JavaFX & SWT 6
data89 Code-completion-window erzeugen - wie? AWT, Swing, JavaFX & SWT 2
C JTree per code selektierte Node wird nicht farbig hinterlegt AWT, Swing, JavaFX & SWT 2
K Swing GUI code tutorials? AWT, Swing, JavaFX & SWT 5
P Swing [gelöst/erledigt] Gleicher Code läuft unterschiedlich unter Linux und Windows AWT, Swing, JavaFX & SWT 5
G Code Blöcke AWT, Swing, JavaFX & SWT 6
S swt table mit checkboxen: wie nachträglich im code setzen? AWT, Swing, JavaFX & SWT 6
PAX Iconified JFrame per Code wieder anzeigen lassen (deiconify) AWT, Swing, JavaFX & SWT 2
O Source Code für "javax.swing.JLabel" ? AWT, Swing, JavaFX & SWT 2
T Öffnen von SWT-Dialogboxen durch HTML-Link in HTML-Code AWT, Swing, JavaFX & SWT 4
Z habe code, habe fehler, habe keine lösung AWT, Swing, JavaFX & SWT 7
P HTMLDocument in einem JTextPane. Anhängen von HTML-Code AWT, Swing, JavaFX & SWT 2
R Sun tutorial code von jcombobox mit image im combobox fehlt! AWT, Swing, JavaFX & SWT 3
S Unterschiedliche Optik trotz gleicher Look and Feel Code? AWT, Swing, JavaFX & SWT 11
C GUI passt sich nicht dem Code an! AWT, Swing, JavaFX & SWT 4
7 Latex/MathML Code in JTextPane AWT, Swing, JavaFX & SWT 2
B Code Architektur verbessern. AWT, Swing, JavaFX & SWT 4
R Syntax Highlighting von Java-Code AWT, Swing, JavaFX & SWT 2
O Swing Event / in GUI oder im Code ausgelöst ? AWT, Swing, JavaFX & SWT 2
J eventhandling / Problemmeldung Bitte schaut euch den Code an AWT, Swing, JavaFX & SWT 2
M Code Schloss AWT, Swing, JavaFX & SWT 11
C wysiwyg Editor zum Einbinden in meinem Code AWT, Swing, JavaFX & SWT 14
m@nu JComboBox & ItemListener: per Code 1. Item wählen AWT, Swing, JavaFX & SWT 2
M Mit JTextPane erstelltes Dokument als HTML-Code ausgeben AWT, Swing, JavaFX & SWT 4
H Code nach dem schließen eines Fensters ausführen? AWT, Swing, JavaFX & SWT 3
M Was halter iht von diesem Code? AWT, Swing, JavaFX & SWT 7
H Model umbauen ? AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben