Frameübergreifend in Datenbank eingeloggt bleiben

schina02

Mitglied
Hallo Leute!

Folgende Situation:

1. Frame, der sich öffnet: Anmeldebildschirm Username eingeben, Passwort eingeben + Button Login
Ich bin also mit der Datenbank verbunden, wenn ich alles richtig eingeben habe.

Wenn nun auf den nächsten Button geklickt wird, öffnet sich ein nächstes Fenster, wo Daten aus der Datenbank angezeigt werden sollen.

Leider zeigt er die Daten nicht an, weil er sozusagen vergessen hat, dass er schon angemeldet ist.


Wie bekomme ich es also hin, dass er beim Öffnen vom nächsten Fenster auch noch eingeloggt ist?

Das ist mein LogIn Fenster:
Java:
package proimmocheck;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;

public class frmLogin extends JFrame {

    static MysqlDataSource mds = new MysqlDataSource();
    static Connection con = null;
    static Statement stm = null;
    static ResultSet rs = null;
    static String sql = null;

    private BorderLayout layoutMain = new BorderLayout();
    private JPanel panelCenter = new JPanel();
    private JMenuBar menuBar = new JMenuBar();
    private JMenu menuFile = new JMenu();
    private JMenuItem menuFileExit = new JMenuItem();
    private JMenu menuHelp = new JMenu();
    private JMenuItem menuHelpAbout = new JMenuItem();
    private JLabel statusBar = new JLabel();
    private JToolBar toolBar = new JToolBar();
    private JButton buttonOpen = new JButton();
    private JButton buttonClose = new JButton();
    private JButton buttonHelp = new JButton();
    private ImageIcon imageOpen = new ImageIcon(frmLogin.class.getResource("openfile.gif"));
    private ImageIcon imageClose = new ImageIcon(frmLogin.class.getResource("closefile.gif"));
    private ImageIcon imageHelp = new ImageIcon(frmLogin.class.getResource("help.gif"));
    private JTextField txtBenutzername = new JTextField();
    private JPasswordField pasPasswort = new JPasswordField();
    private JLabel lblBitteLogin = new JLabel();
    private JButton btnSuchen = new JButton();
    private JButton btnAdmin = new JButton();
    private JButton btnLogin = new JButton();

    public frmLogin() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.setJMenuBar(menuBar);
        this.getContentPane().setLayout(layoutMain);
        panelCenter.setLayout(null);
        this.setSize(new Dimension(400, 300));
        this.setTitle("ImmoCheck - LogIn");
        menuFile.setText("File");
        menuFileExit.setText("Exit");
        menuFileExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                fileExit_ActionPerformed(ae);
            }
        });
        menuHelp.setText("Help");
        menuHelpAbout.setText("About");
        menuHelpAbout.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                helpAbout_ActionPerformed(ae);
            }
        });
        statusBar.setText("");
        buttonOpen.setToolTipText("Open File");
        buttonOpen.setIcon(imageOpen);
        buttonClose.setToolTipText("Close File");
        buttonClose.setIcon(imageClose);
        buttonHelp.setToolTipText("About");
        buttonHelp.setIcon(imageHelp);
        txtBenutzername.setBounds(new Rectangle(5, 35, 150, 40));
        txtBenutzername.setBorder(BorderFactory.createTitledBorder("Benutzername"));
        pasPasswort.setBounds(new Rectangle(160, 35, 130, 40));
        pasPasswort.setBorder(BorderFactory.createTitledBorder("Passwort"));
        lblBitteLogin.setText("Bitte geben Sie Ihre Logindaten ein.");
        lblBitteLogin.setBounds(new Rectangle(5, 15, 250, 15));
        btnSuchen.setText("Immobilie suchen");
        btnSuchen.setBounds(new Rectangle(50, 125, 145, 60));
        btnSuchen.setEnabled(false);
        btnSuchen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btnSuchen_actionPerformed(e);
            }
        });
        btnAdmin.setText("Adminbereich");
        btnAdmin.setBounds(new Rectangle(220, 125, 150, 60));
        btnAdmin.setEnabled(false);
        btnAdmin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btnAdmin_actionPerformed(e);
            }
        });
        btnLogin.setText("LogIn");
        btnLogin.setBounds(new Rectangle(310, 35, 65, 35));
        btnLogin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                btnLogin_actionPerformed(e);
            }
        });
        menuFile.add(menuFileExit);
        menuBar.add(menuFile);
        menuHelp.add(menuHelpAbout);
        menuBar.add(menuHelp);
        this.getContentPane().add(statusBar, BorderLayout.SOUTH);
        toolBar.add(buttonOpen);
        toolBar.add(buttonClose);
        toolBar.add(buttonHelp);
        this.getContentPane().add(toolBar, BorderLayout.NORTH);
        panelCenter.add(btnLogin, null);
        panelCenter.add(btnAdmin, null);
        panelCenter.add(btnSuchen, null);
        panelCenter.add(lblBitteLogin, null);
        panelCenter.add(pasPasswort, null);
        panelCenter.add(txtBenutzername, null);
        this.getContentPane().add(panelCenter, BorderLayout.CENTER);
        
        
    }
    
    
    
    private void Connect() {
        try {
            String sPass = pasPasswort.getText();
            String sUser = txtBenutzername.getText();
            if (sPass != null) {
                final String URL = "jdbc:mysql://localhost/immobilien";
                final String USER = sUser;
                final String PASSWORD = sPass;

                mds.setURL(URL);
                mds.setUser(USER);
                mds.setPassword(PASSWORD);
                con = mds.getConnection(USER, PASSWORD);

                stm = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                sql = "select id, art, ort, zimmer, lagebeschreibung, wohnflaeche, grundflaeche, preis from sortiment";
                stm.executeQuery(sql);
                rs = stm.getResultSet();
            }
            if ((rs != null) && (rs.next()) && (con != null)) {
                JOptionPane.showMessageDialog(null, "Sie sind nun mit der Datenbank verbunden.");
                txtBenutzername.setText("");
                pasPasswort.setText("");
                btnLogin.setEnabled(false);
                btnSuchen.setEnabled(true);
                btnAdmin.setEnabled(true);
            }
            
        }

        catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Sie haben das falsche Passwort eingegeben. Bitte versuchen Sie es erneut!");
            txtBenutzername.setText("");
            pasPasswort.setText("");
        }
    }
    

    void fileExit_ActionPerformed(ActionEvent e) {
        System.exit(0);
    }

    void helpAbout_ActionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(this, new frmLogin_AboutBoxPanel1(), "About", JOptionPane.PLAIN_MESSAGE);
    }



    private void btnAdmin_actionPerformed(ActionEvent e) {

        frmChange openImmoCheck = new frmChange();
        openImmoCheck.setLocation(300, 200);
        openImmoCheck.setVisible(true);

    }

    private void btnLogin_actionPerformed(ActionEvent e) {
        Connect();
        
    }
}
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
das 1. Frame oder 2. ist nicht zu sehen, nicht erkennbar was wo passiert,
nichtmal ob der gepostete Code das 1. oder 2. Frame ist,
vermutlich ist es das 1. wegen des Login-Code, dann ist das zweite komplett unbekannt,
"ich schreibe eine Klasse x die was machen soll, aber ich sage nicht wie, ich poste nicht den Code, es geht einfach nicht"

der offensichtliche 'Trick' dürfte sein, das Verbindungsobjekt, vielleicht MysqlDataSource,
in beiden/ allen Programmteilen zu verwenden,
da das bei dir schon statisch ist, sollte es überall verfügbar sein,
muss das zweite Frame nur mds verwenden statt selber eine MysqlDataSource aufzumachen?
 

schina02

Mitglied
das zweite Fenster ist nicht unbekannt, ich dachte nur der Fehler liegt im Login Fenster.

im zweiten Fenster hab ich in der Main:
Java:
     MysqlDataSource mds;
    Connection con;
    Statement stm;
    ResultSet rs;
    String sql;

und dann in der jbinit:
Java:
        stm = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        sql = "select id, art, ort, zimmer, lagebeschreibung, wohnflaeche, grundflaeche, preis from sortiment";
        stm.executeQuery(sql);
        rs = stm.getResultSet();
 
S

SlaterB

Gast
wie kommst du auf con? von null zu con.createStatement() fehlt wohl was,

aber wie gesagt die statische MysqlDataSource der anderen Klasse benutzen?
 

schina02

Mitglied
also in dem 1. fenster so schreiben:

Java:
    static MysqlDataSource mds = new MysqlDataSource();
    static Connection con;
    static Statement stm;
    static ResultSet rs;
    static String sql;
 

schina02

Mitglied
also es ist am wichtigsten, dass diese beiden strings:

Java:
            String sPass = pasPasswort.getText();
            String sUser = txtBenutzername.getText();

in allen anderen frames verfügbar sind, wie mache ich das?
 
S

SlaterB

Gast
> also in dem 1. fenster so schreiben:

so steht es doch schon im 1. Fenster?
dort sorgst du anscheinend dafür dass mds ordentlich befüllt wird, das ist doch anscheinend dein Hauptanliegen,

ich sage nun dass du im 2. Fenster diese mds benutzen sollst, ist das so eine komplizierte Aussage?
statische Variablen, besonders wenn public, kann man von überall aus referenzieren, bekannt?

die Connection kannst du vielleicht auch gebrauchen, ist sonst aber wohl schnell neu erzeugt usw.

edit: mit den Strings genauso wenn nötig, dann eben erst noch statische Variablen einfügen,
die Alternative ist immer Übergabe im Konstruktor/ set-Methoden, vom 1. Fenster ins 2., oder was immer die Zwischenstufen sind
 
Zuletzt bearbeitet von einem Moderator:

schina02

Mitglied
edit: mit den Strings genauso wenn nötig, dann eben erst noch statische Variablen einfügen,
die Alternative ist immer Übergabe im Konstruktor/ set-Methoden, vom 1. Fenster ins 2., oder was immer die Zwischenstufen sind

kannst du mir da ein kleines beispiel im quellcode geben bitte?

ich glaube so geht es am einfachsten. dann gebe ich einfach das eingetippte passwort an das 2. fenster weiter
 
S

SlaterB

Gast
überall im Programm kannst du Klasse.statischeVariable schreiben, so wie System.out,
out ist eine statische Variable in der Klasse System

wo immer das zweite Fenster erzeugt wird, schreibst du statt
new ZweitesFenster()
jetzt
new ZweitesFenster(name, passwort, was auch immer);

mit entsprechend definierten Konstruktor,
und nein, weiter erkläre ich nicht jemanden, der mit komplizierten GUIs + Datenbanken um sich wirft, wie man auch noch einen Konstruktor schreibt..

auch wird vielleicht name + passwort an der rechten Stelle nicht vorhanden sein,
dann muss man sie eben irgendwo speichern, static will man dabei ja gerade vermeiden,
also vielleicht normale Instanzattribute, eine dritte Klasse muss die Daten vielleicht per getter abfragen usw.,
alles Grundlagen der aller ersten Klassen, was ist eine Variable, wie bekommt man sie von A nach B,
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
L JavaFx Textformatierung mittels Datenbank und Funktion anpassen AWT, Swing, JavaFX & SWT 5
N Java MySQL Datenbank durchsuchen? AWT, Swing, JavaFX & SWT 7
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
M TableView + Datenbank Aktualisierung AWT, Swing, JavaFX & SWT 4
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
S Insert Umlaute in Datenbank AWT, Swing, JavaFX & SWT 5
J Suchmaschine einer Datenbank AWT, Swing, JavaFX & SWT 5
P JavaFX, TableView und Datenbank AWT, Swing, JavaFX & SWT 4
F JavaFX Von Datenbank in ListView AWT, Swing, JavaFX & SWT 4
kilopack15 Simple Datenbank mit AWT AWT, Swing, JavaFX & SWT 9
K Textvorschläge aus der Datenbank AWT, Swing, JavaFX & SWT 25
A checkbox mit allen tabllen aus datenbank befüllen AWT, Swing, JavaFX & SWT 8
C (JavaFX 8) SQLite Datenbank in einem TableView darstellen AWT, Swing, JavaFX & SWT 2
M Combo Box auswahl in eine Datenbank speichern AWT, Swing, JavaFX & SWT 1
V Java FX POJO aus Datenbank in FX TableView / Best Practice AWT, Swing, JavaFX & SWT 0
thet1983 Swing JTable mit MySQL Datenbank AWT, Swing, JavaFX & SWT 14
N JTable, AbstractTableModel aus Datenbank initialisieren AWT, Swing, JavaFX & SWT 8
D Applet GWT speichert Daten nicht in Datenbank AWT, Swing, JavaFX & SWT 2
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
M Datenbank in Jtable mit einem JButton anzeigen lassen AWT, Swing, JavaFX & SWT 4
S Swing JComboBox mit Datenbank füllen AWT, Swing, JavaFX & SWT 16
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
N Formular für Suchanfragen in einer Datenbank AWT, Swing, JavaFX & SWT 3
X Swing Kategoriebaum aus Datenbank erstellen AWT, Swing, JavaFX & SWT 39
J Swing Datenbank in ein Swingfenster importieren? AWT, Swing, JavaFX & SWT 13
K TableModel mit Daten aus Datenbank füllen AWT, Swing, JavaFX & SWT 7
C Combobox im JFrame aus Datenbank befüllen AWT, Swing, JavaFX & SWT 6
C Bild in einer Datenbank speichern? AWT, Swing, JavaFX & SWT 7
S Swing Daten aus Datenbank in JTable AWT, Swing, JavaFX & SWT 2
C Anführungszeichen in JTextArea für Datenbank ersetzen AWT, Swing, JavaFX & SWT 3
B Datensätze einer Datenbank in JTable ausgeben AWT, Swing, JavaFX & SWT 14
O JDialog anzeigen beim öffnen einer Datenbank AWT, Swing, JavaFX & SWT 4
A JList mit 2 Werten aus der Datenbank füttern AWT, Swing, JavaFX & SWT 5
G JTable aus Datenbank füllen AWT, Swing, JavaFX & SWT 4
T Warnkorb + Tabelle + Datenbank AWT, Swing, JavaFX & SWT 3
P JTree aus Datenbank für Kategorien-Realisierung AWT, Swing, JavaFX & SWT 2
P JTable (->Datenbank) editieren/updaten AWT, Swing, JavaFX & SWT 3
R Jtree aus Datenbank akutalisieren AWT, Swing, JavaFX & SWT 9
M Datenbericht aus Datenbank darstellen.(einfaches Konzept) AWT, Swing, JavaFX & SWT 2
A JTable mit MySQL Datenbank füllen AWT, Swing, JavaFX & SWT 12
C [JTable] Update der Datenbank AWT, Swing, JavaFX & SWT 6
U Bild in Datenbank speichern AWT, Swing, JavaFX & SWT 26
T JTable und Datenbank AWT, Swing, JavaFX & SWT 20
W JTextfield aktualisieren / Wert aus Datenbank neu abfragen AWT, Swing, JavaFX & SWT 2
R JTable mit Daten aus der Datenbank füllen AWT, Swing, JavaFX & SWT 3
M Daten aus Datenbank ins JTable einfügen AWT, Swing, JavaFX & SWT 4
G Bild direkt aus Datenbank anzeigen lassen AWT, Swing, JavaFX & SWT 14
M JComboBox aus Datenbank mit 2 Werten füllen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben