Probleme beim JPasswordField

Knippe

Mitglied
Hallo erstmal,
das ganze ich jetzt mein erster Beitrag, also verzeiht mir!
Ich arbeite derzeit an 2 bzw. 1 kleinen und 1 großen Programm.
Das kleine Programm soll ein Login werden, also man soll ein Passwort eingeben können,
besser wäre es sogar wenn eine Datenbank mit eingebaut werden könnte, sodass man auch 2-3 verschiedene Benutzer anlegen könnte, und dann soll sich durch das Login das eigentliche Programm öffnen, welches NUR durch das Login gestartet werden kann (Vielleicht über "href" und if-else?).
Wie man auf dem Bild sehen kann, gibt es 2 Knöpfe, einer der die Eingabe bestätigen soll und einer der die Eingabe bzw. das Feld löschen soll. (Bitte auch Vorschläge dafür)
Naja und das große Programm wird nicht schwierig werden, sondern nur extrem lang und wird viele Kombinationen beinhalten, soll jetzt aber nicht das Thema sein!
Zusammengefasst:
Ich brauche eine Lösung für ein Login (evtl. mit Benutzern+Datenbank), welches ermöglicht ein 2. Java Programm zu öffnen, was man sonst nicht öffnen kann.
Also ich muss einfach sagen, obwohl ich ein bisschen Websites Programmieren kann (mit HTML) und in der Schule Info habe, komme ich hier an mein Ende.
Würde mich sehr über Antworten, Vorschläge etc. freuen 🙂

Java.jpg

Hier der Quellcode:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 10.09.2016
  * @author
  */

public class Passwort extends JFrame {
  // Anfang Attribute
  private JLabel jLabel1 = new JLabel();
  private JPasswordField pw = new JPasswordField();
  private JButton jButton1 = new JButton();
  private JButton jButton2 = new JButton();
  private JLabel jLabel2 = new JLabel();

  // Ende Attribute

  public Passwort() {
  // Frame-Initialisierung
  super();
  setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  int frameWidth = 310;
  int frameHeight = 185;
  setSize(frameWidth, frameHeight);
  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  int x = (d.width - getSize().width) / 2;
  int y = (d.height - getSize().height) / 2;
  setLocation(x, y);
  setTitle("PraktiPool Rechner");
  setResizable(false);
  Container cp = getContentPane();
  cp.setLayout(null);
  // Anfang Komponenten
 
  jLabel1.setBounds(8, 24, 259, 57);
  jLabel1.setText("<html>Willkommen bei dem Praktipool Rechner!  Bevor Sie mit der Eingabe beginnen können  müssen Sie sich durch ein Passwort verifizieren!");
  cp.add(jLabel1);
 
  pw.setBounds(8, 104, 153, 25);
 
  cp.add(pw);
 
  jButton1.setBounds(176, 104, 33, 25);
  jButton1.setText("OK");
  jButton1.setMargin(new Insets(2, 2, 2, 2));
  jButton1.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
  jButton1_ActionPerformed(evt);
  }
  });
  cp.add(jButton1);
  jButton2.setBounds(216, 104, 57, 25);
  jButton2.setText("Cancel");
  jButton2.setMargin(new Insets(2, 2, 2, 2));
  jButton2.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
  jButton2_ActionPerformed(evt);
  }
  });
  cp.add(jButton2);
  jLabel2.setBounds(8, 136, 275, 17);
  jLabel2.setText("  © Jonas Kniepkamp 2016");
  cp.add(jLabel2);
  // Ende Komponenten
 
  setVisible(true);
 
  } // end of public Passwort

  // Anfang Methoden
 

  public static void main(String[] args) {
  new Passwort();
 

  } // end of main

  public void jButton1_ActionPerformed(ActionEvent evt) {
  // TODO hier Quelltext einfügen
  } // end of jButton1_ActionPerformed

  public void jButton2_ActionPerformed(ActionEvent evt)
  {

  } // end of jButton2_ActionPerformed

  // Ende Methoden
} // end of class Passwort
 
Wenn du mit Java noch nicht viel gemacht hast, würde ich dir erstmal vorschlagen(wenn das nur ein Übungsprojekt ist)
deine Anmeldedaten in eine Textdatei zu speichern und die Datenbank erstmal zu überspringen 🙂
Dafür kannst du dir mal den FileReade und FileWriter angucken 🙂

Dann tust du in deine Methode für die Cancel-Button-Action-Methode einfach ein System.exit(0);
und in der Ok-Button-Action-Methode musst du dann halt alle Passwörter aus der Txtdatei oder Datenbank auslesen und mit dem Eingegebenen Vergleichen.
 
Danke Viktim, für deine Antwort!
Ich bin mit meinem Programm schon sehr gut vorran gekommen.
Der Vergleich von Passwort und Benutzer mit dem JPasswordField funtkioniert einwandfrei.
Nur welche Frage sich mir stellt, mit welchem Befehl schaffe ich es durch das erfüllen der if-Bedingung ein anderes Java-Programm, die GUI dieses Programms zu starten..
Habe versucht in meinem Login Programm durch setVisible das ganze zu aktivieren doch das klappt irgenwie nicht. Hier ist mein aktueller Quellcode:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 11.09.2016
  * @author
  */

public class PraktiPoolLogin extends JFrame {
  // Anfang Attribute


  private JLabel Text1 = new JLabel();
  private JTextField BenutzerEingabe = new JTextField();
  private JLabel Benutzer = new JLabel();
  private JLabel Passwort = new JLabel();
  private JPasswordField PasswortEingabe = new JPasswordField();
  private JButton Login = new JButton();
  private JButton Cancel = new JButton();
  private JLabel Jonas = new JLabel();
  private JLabel Ausgabe = new JLabel();

 
 
  // Ende Attribute
 
  public PraktiPoolLogin() {
    // Frame-Initialisierung
    super();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    int frameWidth = 300;
    int frameHeight = 235;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("PraktiPool-Login:");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
   

    Text1.setBounds(8, 8, 291, 65);
    Text1.setText("<html>Willkommen bei dem Praktipool Rechner!<br/>Bevor Sie das Programm starten können,<br/>müssen Sie sich mit Ihrem Benutzernamen<br/>und Ihrem Passwort anmelden!</html>");
    cp.add(Text1);
   
   
    BenutzerEingabe.setBounds(8, 104, 121, 25);
    cp.add(BenutzerEingabe);
   
   
    Benutzer.setBounds(8, 88, 131, 17);
    Benutzer.setText("Benutzername:");
    cp.add(Benutzer);
   
    Passwort.setBounds(8, 144, 123, 17);
    Passwort.setText("Passwort:");
    cp.add(Passwort);
   
       
    PasswortEingabe.setBounds(8, 160, 110, 28);
    cp.add(PasswortEingabe);
   
   
    Login.setBounds(160, 160, 49, 25);
    Login.setText("Login");
    Login.setMargin(new Insets(2, 2, 2, 2));
    Login.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(Login);
   

   
   
    Jonas.setBounds(144, 192, 155, 17);
    Jonas.setText("©Jonas Kniepkamp 2016");
    cp.add(Jonas);
   
    Ausgabe.setBounds(136, 104, 147, 49);
    Ausgabe.setText("");
    cp.add(Ausgabe);

    Cancel.setBounds(224, 160, 49, 25);
    Cancel.setText("Cancel");
    Cancel.setMargin(new Insets(2, 2, 2, 2));
    Cancel.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton2_ActionPerformed(evt);
      }
    });
    cp.add(Cancel);

    // Ende Komponenten
   
    setVisible(true);
  } // end of public PraktiPoolLogin
 
  // Anfang Methoden
 
  public static void main(String[] args)
    
  {
    new PraktiPoolLogin();
  } // end of main
 
   
    public void jButton1_ActionPerformed(ActionEvent evt)
  {     
    char[] c = PasswortEingabe.getPassword();

    String s = BenutzerEingabe.getText();
    String pw = new String(c);
    Ausgabe.setText("");
    if (s.equals("Jonas") && pw.equals("H30q1c8")  || s.equals("Tim") && pw.equals("1z0H3x7q"))
    {                                                                                                                                                                                                                  
      //hier: Möglichkeit, das andere Java Programm PraktiPoolRechner.java zu öffnen!
      Ausgabe.setText ("Erfolgreich angemeldet!");
      Ausgabe.setBackground(Color.GREEN);
      BenutzerEingabe.setBackground(Color.GREEN);
      PasswortEingabe.setBackground(Color.GREEN);
    }  
    else
    {
       Ausgabe.setText ("<html>Falscher Benutzername<br/> oder Passwort!</html>");
       Ausgabe.setForeground(Color.RED);
       BenutzerEingabe.setText("");
       PasswortEingabe.setText("");
       PasswortEingabe.setBackground(Color.RED);
       BenutzerEingabe.setBackground(Color.RED);
   
    } // end of if-else
   
     
    } // end of if


  public void jButton2_ActionPerformed(ActionEvent evt) {
    Ausgabe.setText("");
    BenutzerEingabe.setText("");
    PasswortEingabe.setText("");
    BenutzerEingabe.setBackground(Color.WHITE);
    PasswortEingabe.setBackground(Color.WHITE);
   
  } // end of jButton2_ActionPerformed

   // Ende Methoden
   // end of class PraktiPoolLogin
}
 
Soll das "neue" Programm ein externes Programm sein, also hast du vor z.B. Firefox oder sowas aufzumachen oder möchtest du einfach ein neues Fenster machen?

Externes Programm: Desktop-Klasse
Neues Fenster: Lass es und bearbeite das alte so, das es das beinhaltet, was du haben willst 😉
 
Also es soll nach richtiger Eingabe des Logins (Java-GUI), eine neue GUI mit dem eigentlichen Programm (Java-GUI) gestartet werden.
Geht das, dass ich in das bestehende Programm eine weitere GUI "einbauen" kann?
Das könnte man dann ja mit setVisible(), machen 😉
 
Versuch mal den abschnitt:

Java:
setResizable(true);
setLocation(new Point(0, 0));
setSize(Toolkit.getDefaultToolkit().getScreenSize());
Der dürfte dir dein Fenster schonmal über den ganzen Bildschirm ziehen 🙂
wie du dann weitermachst, musst du mal gucken 😛 😉
 
Ja, also nen maximiertes Fenster habe ich schonmal 🙂
Gibt es nicht einen Befehl mit dem man durch ein Java Programm ein anderes aufrufen kann ? :/
 
Aufruf
Java:
NeuesFenster neu = new NeuesFenster();

Tipp;
Erbe nicht von JFrame, ausser du änderst das Grundverhalten der Klasse JFrame und das machst du hier nicht, du addest nur Komponenten!

mach dir einfach eine neue Klasse wo die eine Methode hast die das JFrame erstellt.
zb.
Code:
public class NeuesFenster{
  public void createFrame(){
     JFrame f = new JFrame("Zweites Fenster");
     createWidgets();
     addWidgets(f);
     // usw
     f.setVisible(true);
  }
}

ich würde die aber empfehlen die basics zu lernen...
 
Du kannst dir genauso wie du es hier auch gemacht hast, ein neues Fenster schreiben, das du dann aber nicht über die Main-Methode aufrufst, sondern halt über deine Methode in deinem Listener 😉
Aber ein neues Fenster ist immer doof... Ich würd das alte nehmen 😀
 
Danke auch an Dich, thet1983! Habe mich jetzt eher entschieden alles in einem Fenster zu regeln, also auch eine einzige Klasse, erschien für mich einfacher.
Nach dem Login wird eine von mir neue Methode gestartet, welche zunächst dafür sorgt, dass alle vorherigen Login Buttons, TextFields etc. durch setBounds(); "unsichtbar" werden und ich dann im nächsten Schritt neue Buttons hinzufüge die dann im gegenzug "sichtbar" werden.
Wahrscheinlich geht es schöner und kürzer, für mich aber erstmal ausreichend 🙂
 

Zurück
Oben