Benutzeroberfläche in anderer Klasse aufrufen

Bensen213

Mitglied
Hallo zusammen,

ich bin neu in diesem Forum angemeldet und ein Neuling in der Java Programmierung.
Ich sitzte gerade an einem Projekt, indem ein Gruppenkalender realisiert werden soll, der auf einer 3 Schichten Architektur aufgebaut ist, d.h. einer grafischen Benutzeroberfläche, einer Applikationsogik und einer Datenbankschicht.

Ich habe nun ein Problem, bei dem ich überhaupt nicht weiter komme und hoffe, mir kann in diesem Forum geholfen werden!

Ich habe eine Benutzeroberfläche erstellt, in der sich eine JCombobox befindet, welche ich mit Personen, die in einer Datenbank angelegt sind, fülle. Dies funktioniert soweit auch.

Java:
this.person = new JComboBox();
this.person = ci.fuellComboBox_Person(this.person); 
Dimension groesseBox = new Dimension(300, 25);
person.setPreferredSize(groesseBox);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
editierenPanel.add(person, constraints);

Von dieser Klasse aus möchte ich durch eine actionPerformed - Methode eine Methode einer anderen Klasse, bzw. einer Benutzeroberfläche aufrufen, die mir die Personendaten in jTextfields ausgibt.

ci ist eine Intanz der Klasse ClientInterface, welche die Methode zum füllen der combobox definiert:

Java:
 JComboBox fuellComboBox_Person(JComboBox wert) {
        //Wenn bisher keine Verbindung hergstellt wurde, wird eine aufgebaut
        if (this.verwaltung == null) {
            this.initServerConnection();
        }

        try {

            //Hole mir alle Personen durch die Verwaltung Klasse
            Vector<Person> person = verwaltung.getAll_Person();


            //Durchlaufe das Ergebnis
            for (Person c : person) {

                /**
                 * Erstelle ein KeyValue was den vornamen, nachnamen und die email der Person speichert
                 * KeyValue ist eine Hilfsklasse
                 */
                KeyValue item = new KeyValue(c.get_person_id() + ":  " + c.get_vorname() + "  " + c.get_nachname() + "  " + "(" + c.get_email() + ")", String.valueOf(c.get_person_id()));
//                KeyValue item = new KeyValue("ID: " + c.get_person_id() + "; Vorname: " + c.get_vorname() + "; Nachname: " + c.get_nachname(), String.valueOf(c.get_person_id()));

                //Füge dieses Item in die JComboBox hinzu
                wert.addItem(item);

            }

        } catch (RemoteException re) {
            System.out.println("RemoteException");
            System.out.println(re);

        }

        return wert;

    }


Java:
 public void actionPerformed(ActionEvent event){

//      String ausgewaehltePerson = (String)person.getSelectedItem();

      int antwort = JOptionPane.showConfirmDialog(frame, "Wollen Sie diese Person editieren?",
      "", JOptionPane.YES_NO_OPTION);
      if (antwort == JOptionPane.YES_OPTION) {

               PersonAktualisieren PeEd = new PersonAktualisieren();
               PeEd.personAktualisieren();
      }

      else if (antwort == JOptionPane.NO_OPTION)
      frame.setVisible(false);
}

Diese Klasse nennt sich personAktualisieren und ist folgendermaßen aufgebaut:

Java:
public class PersonAktualisieren {

JButton personAktualisieren;
JButton abbrechen;
JFrame frame;
JLabel idLabel;
JLabel vornameLabel;
JLabel nachnameLabel;
JLabel emailLabel;
JLabel raumLabel;
JLabel passwortLabel;
JLabel telefonLabel;
JTextField idField;
JTextField nachnameField;
JTextField vornameField;
JTextField emailField;
JTextField raumField;
JTextField passwortField;
JTextField telefonField;

private Hashtable Person = null;
//Referenz zum ClientInterface
//private ClientInterface ci;
private String PerID;
int ID;

private ClientInterface ci = new ClientInterface();

    //Konstruktor
//    public PersonAktualisieren(ClientInterface ci, String email) {
//        this.ci = ci;
//        this.PerID = email;
//        this.Person = this.ci.getPersonData(email);
//    }



//public static void main(String[] args) {
//        PersonAktualisieren gui = new PersonAktualisieren();
//        gui.personAktualisieren();
//        }

public void personAktualisieren(){

frame = new JFrame ("Person aktualisieren");


JPanel personAktualisierenPanel = new JPanel();

GridBagLayout gbl = new GridBagLayout();

personAktualisierenPanel.setLayout(gbl);

GridBagConstraints constraints = new GridBagConstraints();

idLabel = new JLabel("ID:");
constraints.insets = new Insets(9, 9, 9, 9);
constraints.anchor = GridBagConstraints.WEST;
constraints.weightx = 0;
personAktualisierenPanel.add(idLabel, constraints);

idField = new JTextField(3);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(idField, constraints);


vornameLabel = new JLabel("Vorname:");
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(vornameLabel, constraints);

vornameField = new JTextField(20);
this.vornameField.setText((String) this.Person.get("Vorname").toString());
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(vornameField, constraints);

nachnameLabel = new JLabel("Nachname:");
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(nachnameLabel, constraints);

nachnameField = new JTextField(20);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(nachnameField, constraints);

telefonLabel = new JLabel("Telefon:");
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(telefonLabel, constraints);

telefonField = new JTextField(20);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(telefonField, constraints);

emailLabel = new JLabel("E-mail:");
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(emailLabel, constraints);

emailField = new JTextField(20);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(emailField, constraints);

raumLabel = new JLabel("Raum:");
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(raumLabel, constraints);

raumField = new JTextField(20);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(raumField, constraints);

passwortLabel = new JLabel("Passwort:");
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(passwortLabel, constraints);

passwortField = new JTextField(20);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(passwortField, constraints);



personAktualisieren = new JButton("aktualisieren");
constraints.insets = new Insets(56,9,0,0);
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(personAktualisieren, constraints);
personAktualisieren.addActionListener(new personAktualisierenListener());


abbrechen = new JButton("abbrechen");
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.NONE;
personAktualisierenPanel.add(abbrechen, constraints);
abbrechen.addActionListener(new personabbrechenListener());

frame.getContentPane().add(personAktualisierenPanel);
frame.setSize(400, 400);
frame.setResizable(false);
frame.setVisible(true);

}

class personAktualisierenListener implements ActionListener{

    int personID = Integer.parseInt(idField.getText());

    public void actionPerformed(ActionEvent event){

      int antwort = JOptionPane.showConfirmDialog(frame, "Wollen Sie diese Person aktualisieren?",
      "", JOptionPane.YES_NO_OPTION);
      if (antwort == JOptionPane.YES_OPTION) {


         Person zueditierendePerson = ci.updatePerson(personID, vornameField.getText().trim(),nachnameField.getText().trim(),raumField.getText().trim(),emailField.getText().trim(),telefonField.getText().trim(),passwortField.getText().trim());

         if(zueditierendePerson != null){
         //Meldung erzeugen
         JOptionPane.showMessageDialog(null, "Person wurde aktualisert!","Meldung", JOptionPane.OK_CANCEL_OPTION);
         }

         //Meldung erzeugen, für den Fall das der Passenger nicht erzeugt werden konnte.
        else {
        JOptionPane.showMessageDialog(null, String.format("Person wurde nicht aktualisert", event.getActionCommand()));
        }
     }


      else if (antwort == JOptionPane.NO_OPTION)
      frame.setVisible(false);
}
}
class personabbrechenListener implements ActionListener{

    public void actionPerformed(ActionEvent event){

      int antwort = JOptionPane.showConfirmDialog(frame, "Wollen Sie den Vorgang wirklich beenden?",
      "", JOptionPane.YES_NO_OPTION);
      if (antwort == JOptionPane.YES_OPTION)
      frame.setVisible(false);
    }
}

}

Wenn ich nun die actionPerformed Methode der Klasse personEditierenAuswahl aufrufe, gibt mir meine IDE eine NullpointerException aus!

Ich hoffe ich habe das Problem einigermaßen verständlich formuliert und hoffe mir kann einer von euch bei meinem Problem helfen!

Danke im voraus für eure Antworten!

Gruß

Ben
 
falls ich mich jetzt nicht verlesen habe, dann liegt der Fehler hier begraben:

Java:
int antwort = JOptionPane.showConfirmDialog(frame, "Wollen Sie diese Person editieren?",
      "", JOptionPane.YES_NO_OPTION);
du verwendest bereits hier die Variable frame, die erst während des Aufrufs der Methode
Java:
    PeEd.personAktualisieren();
später initialisierst!
Versuch doch in der Klasse PersonAktualisieren deinen frame gleich beim deklarieren zu initialisieren:

Java:
    JButton personAktualisieren;
    JButton abbrechen;
    JFrame frame = new JFrame("Person aktualisieren");
 
hey anti-held,

erstmal vielen Dank für deine Hilfe!

Habe es mal geändert, jedoch gibt er mir immer noch folgende Meldung aus:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at GUI.PersonAktualisieren.personAktualisieren(PersonAktualisieren.java:99)
        at GUI.PersonEditierenAuswahl$editierenListener.actionPerformed(PersonEditierenAuswahl.java:151)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6505)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
        at java.awt.Component.processEvent(Component.java:6270)
        at java.awt.Container.processEvent(Container.java:2229)
        at java.awt.Component.dispatchEventImpl(Component.java:4861)
        at java.awt.Container.dispatchEventImpl(Container.java:2287)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
        at java.awt.Container.dispatchEventImpl(Container.java:2273)
        at java.awt.Window.dispatchEventImpl(Window.java:2719)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:682)
        at java.awt.EventQueue$3.run(EventQueue.java:680)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:696)
        at java.awt.EventQueue$4.run(EventQueue.java:694)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

Gruß
 
anscheinend passiert bei dir in der Methode personAktualisieren in der Klasse PersonAktualisieren der Fehler.
Bitte poste doch die Zeile (Zeile 99).
Da du Änderungen vorgenommen hast, hat sich die Zeilennummer verschoben.
 
Hey anti-held,

genau die Zeile ist mir auch aufgefallen, hab aber bis jetzt noch nicht rausgefunden, was da genau nicht passt. Vielleicht kannst mir ja weiter helfen. Wäre super!

Gruß

Java:
this.vornameField.setText((String) this.Person.get("Vorname").toString());
 

Zurück
Oben