Codezeilen "auslagern"

dennisT

Mitglied
Hallo, ich habe ein Programm geschrieben was momentan ca 3000Zeilen hat. Ich habe mir überlegt, um es übersichtlicher zu gestalten, bestimmte Zeilen "auszulagern" sprich diese in eine neue .java Datei zu speichern.

Hier mal ein Beispielcode:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.io.*;
import java.text.*;
import java.util.*;
import java.sql.*;
import javax.swing.border.*;


public class Compafree extends JFrame  {

  Container cp;
  private static Compafree fenster = new Compafree("");
  String serverdaten[] = new String[10];
  JTextField jtf_loginname;
  JPasswordField jpf_loginpasswort;
  String loginNameAusDB="";
  int fullwidth = 0;
  JButton jb_login = new JButton("Login");

  JPanel jp_center = new JPanel();
  JPanel jp_loginbuttons = new JPanel();
  JPanel jp_logo = new JPanel();

  public Compafree (String title) {
    super(title);
    cp=getContentPane();
    Lauscher lausch = new Lauscher();

    jtf_loginname = new JTextField(10);
    jpf_loginpasswort = new JPasswordField(10);

    JLabel jl_loginname = new JLabel("Name:",JLabel.CENTER);
    JLabel jl_loginpasswort = new JLabel("Passwort:",JLabel.CENTER);

    jb_login.addActionListener(lausch);

    JPanel jp_login = new JPanel();
           jp_login.setLayout(new GridLayout(4,1));
           jp_login.add(jl_loginname);
           jp_login.add(jtf_loginname);
           jp_login.add(jl_loginpasswort);
           jp_login.add(jpf_loginpasswort);

    jp_center.add(jp_login);
    cp.add(jp_center,"Center");
    cp.add(jb_login,"South");
    
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  }

  class Lauscher implements ActionListener {
    public void actionPerformed(ActionEvent e) {

/////////////////////////////////////////LOGIN////////////////////////////////////////////////////////
      if( e.getSource() == jb_login){

        String loginPWAusDB="";
        String loginname = jtf_loginname.getText();
        String loginpassname = new String(jpf_loginpasswort.getPassword());
        
          try{
            Connection con = DriverManager.getConnection("jdbc:mysql://"+serverdaten[0]+"/"+serverdaten[1],serverdaten[2],serverdaten[3]);
            Statement stmt = con.createStatement();
            ResultSet rslt = stmt.executeQuery("select * from ttm_user where Name = '"+loginname+"'");
            while (rslt.next()) {
              loginNameAusDB=(rslt.getString("Name"));
              loginPWAusDB=(rslt.getString("Passwort"));
            }
            stmt.close();
            con.close();
          }
          catch (Exception f){}

          if(loginNameAusDB.equals(loginname)&&loginPWAusDB.equals(loginpassname)){
          
            jp_center.removeAll();
          }
      }
//////////////////////////////////////////////////////////////////////////////////////////////////////
    }
  }
/////////////////////////////////////////////MAIN/////////////////////////////////////////////////////////
    public static void main(String[] args) throws Exception {
      fenster.setSize(200,200);
      fenster.setLocationRelativeTo(null);
      fenster.setVisible(true);
    }
  }

Wäre es nun möglich diesen Abschnitt:
Java:
/////////////////////////////////////////LOGIN////////////////////////////////////////////////////////
      if( e.getSource() == jb_login){

        String loginPWAusDB="";
        String loginname = jtf_loginname.getText();
        String loginpassname = new String(jpf_loginpasswort.getPassword());
        
          try{
            Connection con = DriverManager.getConnection("jdbc:mysql://"+serverdaten[0]+"/"+serverdaten[1],serverdaten[2],serverdaten[3]);
            Statement stmt = con.createStatement();
            ResultSet rslt = stmt.executeQuery("select * from ttm_user where Name = '"+loginname+"'");
            while (rslt.next()) {
              loginNameAusDB=(rslt.getString("Name"));
              loginPWAusDB=(rslt.getString("Passwort"));
            }
            stmt.close();
            con.close();
          }
          catch (Exception f){}

          if(loginNameAusDB.equals(loginname)&&loginPWAusDB.equals(loginpassname)){
          
            jp_center.removeAll();
          }
      }
//////////////////////////////////////////////////////////////////////////////////////////////////////
In eine neue java Datei zu speichern?
Ich habs schon selber versucht aber dann konnte er nie die JTextFields erkennen. ? Wäre für hilfe dankbar.
 

Landei

Top Contributor
So nicht. Du könntest eine Klasse namens Lauscher.java machen
Java:
public class Lauscher implements ActionListener {
  private JTextField jtf_loginname;
  //und was du sonst noch aus der Hauptklasse verwendest

  public Lauscher(JTextField jtf_loginname, /*und was du sonst noch aus der Hauptklasse verwendest*/) {
      this.jtf_loginname = jtf_loginname;
      //der Rest auch so
  }
  ...
  //das bleibt alles
}

Im Hauptprogramm musst du dann dem Lauscher-Konstruktor alle Felder "mitgeben", die er so braucht.
 

Guardi

Bekanntes Mitglied
Ähem, das ist aber quick and dirty gelöst.
Code für DB hat nichts in Klassen verloren in denen Swing-Komponenten sind.
Also mach jeweils eine Klasse aus DB, Swing und ActionListener.

Wenn du es allerdings richtig machen willst.
MVC-Pattern und Facade-Pattern anschauen und versuchen umzusetzen.
 

Empire Phoenix

Top Contributor
Ein erster schrit währe es, das der actionlistener nur noch eine normal methode aufrüft wo er alles was benötigt wird weitergibt (aka textfelder und so weiter), damit ist dann das ganze zumindest schonmal etwas übersichtlicher.

Idealerweise sollte gui aber eigentlich keine logic enthalten. (Zumindest bei anwendung von MVC)
 

Landei

Top Contributor
Ähem, das ist aber quick and dirty gelöst.

Na ja, wichtig ist, dass man mit dem Refactoring erst einmal irgendwo anfängt, und das kann bei einem 3000-Zeilen-Monster recht schwierig sein. Wenn man schon "fertige" innere Klassen hat, nimmt man eben die, und macht zu äußeren. Natürlich sollte man dabei nicht stehenbleiben, sondern zu versuchen, die neuen Strukturen weiter zu verbessern. Für weitergehende Tipps stehen hier aber nicht genügend Informationen zur Verfügung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Klasse zu groß (>3000 codezeilen). wie sinnvoll strukturi Java Basics - Anfänger-Themen 9
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
S Funktion in Klasse auslagern Java Basics - Anfänger-Themen 4
N Methode auslagern mal wieder Java Basics - Anfänger-Themen 8
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J Threads Prozess in Thread auslagern Java Basics - Anfänger-Themen 2
B Erste Schritte JFrame in Klasse auslagern Java Basics - Anfänger-Themen 4
K Erste Schritte jpanel in einer klasse auslagern Java Basics - Anfänger-Themen 3
K Exceptions auslagern Java Basics - Anfänger-Themen 15
K Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen Java Basics - Anfänger-Themen 8
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
D Programmteile in Klassen auslagern Java Basics - Anfänger-Themen 2
M MVC - gui auslagern Java Basics - Anfänger-Themen 2
K JPanel auslagern Java Basics - Anfänger-Themen 9
M Vererbung Auslagern von UI AbstractAction? Java Basics - Anfänger-Themen 2
T ActionListener auslagern Java Basics - Anfänger-Themen 14
E OOP Methoden auslagern Java Basics - Anfänger-Themen 9
F Klasse bzw Objekt in eigenen Thread auslagern Java Basics - Anfänger-Themen 3
W Eventhandling auslagern Java Basics - Anfänger-Themen 4
M Java Objekte auf Platte auslagern. Java Basics - Anfänger-Themen 8
S Bild aus paint() Methode auslagern Java Basics - Anfänger-Themen 14
MrMilti einzelne Methoden einer Klasse auslagern Java Basics - Anfänger-Themen 6
K SQL Statement formatieren + Swingzeug auslagern Java Basics - Anfänger-Themen 18
I Listenerklassen in externe Dateien auslagern? Java Basics - Anfänger-Themen 7
S Icons in Icon-Odner auslagern Java Basics - Anfänger-Themen 2
S auslagern von Methoden in andere Klasse Java Basics - Anfänger-Themen 4
T Operation in Thread auslagern? Java Basics - Anfänger-Themen 7
N Mehrfach von Klassen benutze Methode in Interface auslagern? Java Basics - Anfänger-Themen 3
G Mtehoden auslagern Java Basics - Anfänger-Themen 10
P Thread auslagern Java Basics - Anfänger-Themen 4
G Daten auslagern? Java Basics - Anfänger-Themen 7
P class in neuen Thread auslagern Java Basics - Anfänger-Themen 3
G Zeichenklasse auslagern Java Basics - Anfänger-Themen 5
T classen auslagern Java Basics - Anfänger-Themen 16
F FileChooser auslagern Java Basics - Anfänger-Themen 2
N Methode auslagern Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben