Grüßt euch,
hab mal wieder nen Problem am Start. Und zwar geht es um folgendes:
Es gibt 3 Klassen:
- GUIController
- LoginWindow
- RegistrationWindow
Die sehen wie folgt aus:
Beim ersten Fenster (LoginWindow) funktioniert das übergeben der Buttons & Textfelder wunderbar.
Hab mich beim Design der 2ten Klasse an der ersten angelehnt, jedoch ohne Erfolg.
Beim Klick auf den Button "Registrieren" oder "Löschen" springt ne NPE...
hab mal wieder nen Problem am Start. Und zwar geht es um folgendes:
Es gibt 3 Klassen:
- GUIController
- LoginWindow
- RegistrationWindow
Die sehen wie folgt aus:
Java:
package adressbook;
import gui.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class GUIController implements ActionListener
{
//LoginWindow.java
private JButton button_login, button_registration;
private JTextField textfield_username;
private JPasswordField passwordfield_password;
//RegistrationWindow.java
private JButton button_sendRegistration, button_clear;
private JTextField textfield_forename, textfield_surname, textfield_adress, textfield_telephone, textfield_email;
private Database database = new Database();
//Constructor for LoginWindow
public GUIController(JButton login, JButton registration, JTextField username, JPasswordField password)
{
this.button_login = login;
this.button_registration = registration;
this.textfield_username = username;
this.passwordfield_password = password;
}
//Constructor for RegistrationWindow
public GUIController(JButton send, JButton clear, JTextField forename, JTextField surname, JTextField adress, JTextField telephone, JTextField email)
{
this.button_sendRegistration = send;
this.button_clear = clear;
this.textfield_forename = forename;
this.textfield_surname = surname;
this.textfield_adress = adress;
this.textfield_telephone = telephone;
this.textfield_email = email;
}
@Override
public void actionPerformed(ActionEvent event)
{
String login_username = textfield_username.getText();
String login_password = passwordfield_password.getText();
switch (event.getActionCommand())
{
//-----LOGIN BUTTON-----
case "Login":
//If both textfields aren't empty
if (Utility.checkString(login_username) && Utility.checkString(login_password))
{
try
{
//If login was succesfull
if (database.login(login_username, login_password))
{
Utility.showMessage("Login war erfolgreich!", "Login", 1);
Utility.close(Main.login);
new RegistrationWindow().setVisible(true);
}
//Login failed
else
{
Utility.showMessage("Benutzername und/oder Passwort falsch!", "Fehlerhafte Eingabe", 0);
}
}
catch (Exception e)
{
System.err.printf("Fehler beim Login! %n%s", e.getMessage());
}
}
//One or both textfields are empty or null
else
{
Utility.showMessage("Bitte alle Felder ausfüllen!", "Fehlerhafte Eingabe", 2);
}
break;
//-----REGI BUTTON-----
case "Registration":
//If both textfields aren't empty
if (Utility.checkString(login_username) && Utility.checkString(login_password))
{
try
{
//Try to register user with given username and password
if (database.registerUser(login_username, login_password))
{
Utility.showMessage("Erfolgreich registriert!", "Registration", 1);
Utility.close(Main.login);
new RegistrationWindow().setVisible(true);
}
//Registration failed
else
{
//Utility.showMessage("Registrierung fehlgeschlagen!", "Technischer Fehler.", 2);
}
}
//I dont know what is happening here
catch (Exception e)
{
System.err.printf("Fehler beim Registrieren des Users %n%s", e.getMessage());
}
}
//There is a empty or null textfield
else
{
Utility.showMessage("Bitte alle Felder ausfüllen!", "Fehlerhafte Eingabe", 2);
}
break;
case "Registrieren":
break;
case "Löschen":
break;
}
}
}
Java:
package gui;
import adressbook.Utility;
import adressbook.GUIController;
public class LoginWindow extends javax.swing.JFrame
{
private GUIController controller;
public LoginWindow()
{
initComponents();
controller = new GUIController(button_login, button_registration, tf_username, tf_password);
addListener(controller);
Utility.centerWindow(this);
}
private void addListener(GUIController controller)
{
button_login.addActionListener(controller);
button_registration.addActionListener(controller);
tf_username.addActionListener(controller);
tf_password.addActionListener(controller);
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
label_username = new javax.swing.JLabel();
label_password = new javax.swing.JLabel();
tf_username = new javax.swing.JTextField();
tf_password = new javax.swing.JPasswordField();
button_login = new javax.swing.JButton();
button_registration = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Login");
setResizable(false);
label_username.setText("Benutzername");
label_password.setText("Passwort");
button_login.setText("Login");
button_registration.setText("Registration");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(label_username)
.addComponent(label_password))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tf_username)
.addComponent(tf_password)))
.addGroup(layout.createSequentialGroup()
.addComponent(button_login, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(button_registration, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(label_username)
.addComponent(tf_username, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(label_password)
.addComponent(tf_password, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(button_login)
.addComponent(button_registration))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton button_login;
private javax.swing.JButton button_registration;
private javax.swing.JLabel label_password;
private javax.swing.JLabel label_username;
private javax.swing.JPasswordField tf_password;
private javax.swing.JTextField tf_username;
// End of variables declaration
}
Java:
package gui;
import adressbook.Utility;
import adressbook.GUIController;
public class RegistrationWindow extends javax.swing.JFrame
{
private GUIController controller;
public RegistrationWindow()
{
initComponents();
controller = new GUIController(button_registrieren, button_clear, tf_vorname, tf_nachname, tf_adresse, tf_email, tf_telefon);
addListener(controller);
Utility.centerWindow(this);
}
private void addListener(GUIController controller)
{
button_registrieren.addActionListener(controller);
button_clear.addActionListener(controller);
tf_vorname.addActionListener(controller);
tf_nachname.addActionListener(controller);
tf_adresse.addActionListener(controller);
tf_telefon.addActionListener(controller);
tf_email.addActionListener(controller);
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents()
{
label_vorname = new javax.swing.JLabel();
label_nachname = new javax.swing.JLabel();
label_adresse = new javax.swing.JLabel();
label_email = new javax.swing.JLabel();
label_telefon = new javax.swing.JLabel();
tf_vorname = new javax.swing.JTextField();
tf_nachname = new javax.swing.JTextField();
tf_adresse = new javax.swing.JTextField();
tf_email = new javax.swing.JTextField();
tf_telefon = new javax.swing.JTextField();
button_registrieren = new javax.swing.JButton();
button_clear = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Registration");
setResizable(false);
label_vorname.setText("Vorname");
label_nachname.setText("Nachname");
label_adresse.setText("Adresse");
label_email.setText("E-Mail");
label_telefon.setText("Telefon");
button_registrieren.setText("Registrieren");
button_clear.setText("Löschen");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(label_vorname)
.addComponent(label_nachname)
.addComponent(label_adresse)
.addComponent(label_email)
.addComponent(label_telefon))
.addGap(29, 29, 29)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tf_telefon, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tf_email, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tf_adresse, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tf_nachname, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tf_vorname, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addComponent(button_registrieren, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(button_clear, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(label_vorname)
.addComponent(tf_vorname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(label_nachname)
.addComponent(tf_nachname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(label_adresse)
.addComponent(tf_adresse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(label_email)
.addComponent(tf_email, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(label_telefon)
.addComponent(tf_telefon, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(30, 30, 30)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(button_registrieren, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(button_clear, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton button_clear;
private javax.swing.JButton button_registrieren;
private javax.swing.JLabel label_adresse;
private javax.swing.JLabel label_email;
private javax.swing.JLabel label_nachname;
private javax.swing.JLabel label_telefon;
private javax.swing.JLabel label_vorname;
private javax.swing.JTextField tf_adresse;
private javax.swing.JTextField tf_email;
private javax.swing.JTextField tf_nachname;
private javax.swing.JTextField tf_telefon;
private javax.swing.JTextField tf_vorname;
// End of variables declaration
}
Java:
package adressbook;
import gui.*;
public class Main
{
public static LoginWindow login = new LoginWindow();
public static RegistrationWindow regi = new RegistrationWindow();
public static Adressbook adressbook = new Adressbook();
public static void main(String[] args)
{
login.setVisible(true);
}
}
Beim ersten Fenster (LoginWindow) funktioniert das übergeben der Buttons & Textfelder wunderbar.
Hab mich beim Design der 2ten Klasse an der ersten angelehnt, jedoch ohne Erfolg.
Beim Klick auf den Button "Registrieren" oder "Löschen" springt ne NPE...