Rückgabewerte bei private void jButton1ActionPerformed

nieselfriem

Bekanntes Mitglied
Hallo!

Ich bin dabei eine kleine Datenbankanwendung zu programmieren. Bevor der Hauptbildschirm zu sehen sein soll, soll ein JDialog mit Benutzereingabe und Passwort erscheinen. Erst wenn die eingabe richtig ist, soll das Hauptfenster erscheinen. Dabei hatte ich mir gedacht, dass ich im JDialog die Verbindung erstellt und das Connectionobjekt als Rückgabewert liefere. Erst wenn dieses vorhanden ist, soll das Hauptfenster erscheinen. Und hier kommt mein Problem

im JDialog habe ich folgende Methoden

Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
          String pw = String.valueOf(dbpwTf.getPassword());
        if (pw.length() < 1) {
            JOptionPane.showMessageDialog(this, "Bitte ein Passwort eingeben!",
                    "Error", JOptionPane.ERROR_MESSAGE);
        } else {
              getConnection();

        }
    }                                        
    
    private Connection getConnection() {
        try {
                //conn = Verbindungen.driver(String.valueOf(dbpwTf.getPassword()));
            conn = Verbindungen.driver(String.valueOf(dbpwTf.getPassword()));
                JOptionPane.showMessageDialog(this, "Datenbankverbindung erfolgreich hergestellt!",
                        "Meldung...", JOptionPane.INFORMATION_MESSAGE);
              
            } catch (ClassNotFoundException cx) {
                //cx.printStackTrace();
                JOptionPane.showMessageDialog(this, cx.getMessage(),
                        "Error", JOptionPane.ERROR_MESSAGE);

            } catch (SQLException sqlex) {
                //sqlex.printStackTrace();
                JOptionPane.showMessageDialog(this, sqlex.getMessage(),
                        "Error", JOptionPane.ERROR_MESSAGE);
            } catch (Exception ex) {
                //ex.printStackTrace();
                JOptionPane.showMessageDialog(this, ex.getMessage(),
                        "Error", JOptionPane.ERROR_MESSAGE);
            }
        return conn;
    }

getConnection() liefert also das Connectionobjeckt

nun der Aufrufe im Hauptfensterkonstruktor mit der Frage als Kommentar
Java:
private Connection conn = null;
...
DBLogin dbl = new DBLogin(Main.this, true);
dbl.setVisible(true);
conn=...//Wie bekomm ich den Rückgabewert von getConnection aus dem JDialog???

Ich hoffe es ist verständlich

Gruß niesel
 

knoppers

Bekanntes Mitglied
1. Total falscher Ansatz für Datenbankzugriff. Connection reicht man nicht weiter. Man öffnet sie und schließt sie nach jedem Zugriff auf die Datenbank. Sonst hat das mal bei größeren Projekte sehr üble Folgen.

2. Unten die Lösung. Falls du dein Problem so meinst. Natürlich mit der Änderung von private auf public (z.B. Zusatzmethode, oder Übergabemethoden).

Java:
private Connection conn = null;
...
DBLogin dbl = new DBLogin(Main.this, true);
dbl.setVisible(true);
conn=dbl.getMyConnection()
 

nieselfriem

Bekanntes Mitglied
aber getConnection soll doch vom Button im JDialog ausgelöst werden und nicht vom Aufruf der Methode direkt vom Objekt aus.

P.S. Habe aufrund deines Einwandes die Methode in boolean getAuthorized() umbenannt.

Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
          String pw = String.valueOf(dbpwTf.getPassword());
        if (pw.length() < 1) {
            JOptionPane.showMessageDialog(this, "Bitte ein Passwort eingeben!",
                    "Error", JOptionPane.ERROR_MESSAGE);
        } else {
              getAuthorized();//Datenbankverbindung aufbauen und ein true zurückliefern

        }
    }
Gruß niesel
 

knoppers

Bekanntes Mitglied
Mal ein kleiner Tipp. Erstelle dir eine Art SessionBean, wie man es bei größeren Projekten und JSF und Derivaten macht. In dieser Bean regelst du so etwas.

Java:
public class MeinProgramm {
      public static void main(String[] args) {
              new SessionBean().start();
      }
}

public class SessionBean {
      public void start() {
            DlgLogin login = new DlgLogin();
            login.setVisible(true);
            if (login.isLogin) {
                  // Er ist eingeloggt, starte die Hauptapplikation
                  Hauptprogramm app = new Hauptprogram();
                  app.setVisible(true);
            } else {
                  // Programmende
            }
      }
}

public class DlgLogin {
      // GUI Klasse für Login
}

Ich persönliche trenne meine GUI Komponenten komplett in Logic und GUI. GUI ist dann nur die Visuelle Ansicht. Logic ist der Handler für die jeweilige Oberfläche. Die SessionBean ist die Komponente für die Übermittlung von Klassen ABean zu BBean zu CBean. ABean ist BackingBean für GUILogin, BBean ist BackingBean für Hauptapplikation, usw. Man kann diese Art von Projektaufbau bis runter auf z.B. eine Toolbar mit Komplexer Logic führen. Hier nur mal so als Beispiel ganz einfach dargestellt.
Dies hat jetzt aber noch nichts mit Datenbank oder Businesslogic zu tun. Die Businesslogic steuert deine Datenbankzugriffe für die jeweiligen Objekte, wie z.B. User, Konten, usw. Im BusinessManager sind dann die jeweiligen Datenbankzugriffe implementiert wie select, insert, usw.
 

nieselfriem

Bekanntes Mitglied
ich habs noch nicht per Bean gemacht, so wie es vorgeschlagen worden ist. Jedoch habe ich folgendes Problem
bei der Methode wie ich es bisher gemacht habe. Das JDialog Fenster schliesst sich nicht
Java:
dbl.setVisible(true);
        if(dbl.getAuthorized()==true) {//wenn Autorisation erfolgt ist
            dbl.setVisible(false);//Schließe JDialog
            setVisible(true);//Öffne Hauptfenster
        }
Jedoch erfolgt der Login wenn ich auf OK drücke. Das Infofenster, dass dieser Loginversuch erfolgreich war erscheint bei drücken des ok-Buttons. Das Hauptfenster kommt erst zum Vorschein, nachdem ich den JDialog manuell geschlossen habe und das Infofenster über die erfolgreiche Verbindung erscheint noch einmal.

Gruß niesel
 

Ähnliche Java Themen


Oben