Swing FileWriter schreibt keine Daten in Datei

Alex2013

Bekanntes Mitglied
Hallo Leute,

ich habe bei meinem Programm versucht, die grafischen Elemente so auszubauen, dass das Programm die Daten von Personen in eine Datei schreiben soll (bzw. zwei Dateien).
Jedoch wird, wenn das Programm ausgeführt wird, höchstens eine leere Datei, also ohne Inhalt erzeugt.

Nach einiger Recherche und herum Probieren, gibt mir eine Methode nur noch eine Fehlermeldung.
Habt ihr ggfs. einen Tipp, wie ich die Daten, die ich über ein Gui eingebe und die im Programm selbst angezeigt werden, auch in einer lokalen Datei abspeichern kann, so dass diese länger (bis über das Beenden des Programmes hinaus) zur Verfügung stehen?

Mein bisheriger Code:
Java:
try{
            int i=0;
            int[] datenPerson1=new int[9];
            FileWriter stream=new FileWriter("C:\\Users\\Alexander Admin\\Desktop\\person1.txt");
            for(i=0;i<datenPerson1.length;i++)
            {
                datenPerson1[0]=Integer.parseInt(name1.getText());
                datenPerson1[1]=Integer.parseInt(land1.getText());
                datenPerson1[2]=Integer.parseInt(beruf1.getText());
                datenPerson1[3]=Integer.parseInt(wohnort1.getText());
                datenPerson1[4]=Integer.parseInt(geburtsdatum1.getText());
                datenPerson1[5]=Integer.parseInt(haarfarbe1.getText());
                datenPerson1[6]=Integer.parseInt(augenfarbe1.getText());
                datenPerson1[7]=Integer.parseInt(groesse1.getText());
                if(maennlich.isSelected())
                datenPerson1[8]=Integer.parseInt(maennlich.getText());
                else
                    datenPerson1[8]=Integer.parseInt(weiblich.getText());
            }

            BufferedWriter out=new BufferedWriter(stream);
            out.write(datenPerson1); //Hier wird jetzt zusätzlich angezeigt, dass datenPerson1 zu //einer int Variable geändert werden soll
            out.close();
        }catch(Exception e){}
    }
Die Daten an sich, sollen auch noch in einerm String array gespeichert werden und bei betätigen des löschen Buttons entfernt werden. Das muss ich auch noch anpassen.
Habt ihr zu der obigen Fragestellung ggfs. einen Tipp oder einen anderen Ansatz?

Vielen Dank schon mal.
Lg
 
Zuletzt bearbeitet von einem Moderator:
Du kannst bei einem BufferedWriter kein int-Array schreiben. Ich glaube auch nicht, dass du bei Name oder Land in ein int verwandeln kannst.

Sieh dir mal CSV oder XML Fileformat an, da gibts in Java dann auch zig Lösungen, wie man die ein- und auslesen kann.
 
Java:
try{
.............
        }catch(Exception e){}
    }
Die Daten an sich, sollen auch noch in einerm String array gespeichert werden und bei betätigen des löschen Buttons entfernt werden. Das muss ich auch noch anpassen.

WICHTIG: Lasse deinen "catch"-Block nicht einfach leer. Sollte eine Exception fliegen wird diese aufgefangen und damit nichts gemacht und du wirst auch NIE mitbekommen wenn eine fliegt.
Daher am besten einfach die Exception ausgeben lassen mittels "e.printStackTrace()" (natürlich gibt es auch Alternative -> Logging, ...).

Du willst deine Daten in ein String Array speichern, wandelst aber alles in ein Integer? Bist du dir sicher das du genau weißt was dein Code machen soll? 😉
 
Ich habe es jetzt etwas umgestellt...
Ich hatte ursprünglich eine Datei, in die auch geschrieben werden konnte. Allerdings unschön ohne Abstände etc. Hier wurde auch immer der bestehende Inhalt durch den zweiten überschrieben. Dieses Verhalten konnte ich auch durch eine boolean Variable nicht ändern. Jetzt habe ich es so, dass in zwei Dateien geschrieben werden soll. Diese werden auch beide erstellt. Es wird aber trotzdem nur in eine Datei geschrieben. Und auch nur der erste Teil. Die Daten der zweiten Person werden nicht in die Datei geschrieben. Fehler werden nicht ausgeworfen.
Hat hier vielleicht noch jemand einen Tipp?

Hier der jetzige Code, wie er zum Teil funktioniert:
Java:
public void setPerson(boolean stat, String name,String land,String beruf,String wohnort,String haarfarbe,String augenfarbe,String groesse,String geburtsdatum)
    {
        DatenPerson dp=new DatenPerson(name, land, beruf, wohnort, haarfarbe, augenfarbe, geburtsdatum, groesse, geburtsdatum);
    
        if(stat==true)
        {
            pers1[0]=this.name1.getText();
            pers1[1]=this.land1.getText();
            pers1[2]=this.beruf1.getText();
            pers1[3]=this.wohnort1.getText();
            pers1[4]=this.haarfarbe1.getText();
            pers1[5]=this.augenfarbe1.getText();
            pers1[6]=this.groesse1.getText();
            pers1[7]=this.geburtsdatum1.getText();
        
            String[] datenPerson1=new String[9];
            FileWriter stream;
            try {
                stream = new FileWriter("C:\\Users\\Alexander Admin\\Desktop\\person1.txt");
        
            datenPerson1[0]=name1.getText();
            datenPerson1[1]=land1.getText();
            datenPerson1[2]=beruf1.getText();
            datenPerson1[3]=wohnort1.getText();
            datenPerson1[4]=geburtsdatum1.getText();
            datenPerson1[5]=haarfarbe1.getText();
            datenPerson1[6]=augenfarbe1.getText();
            datenPerson1[7]=groesse1.getText();
            if(maennlich.isSelected())
            datenPerson1[8]=maennlich.getText();
            else
                datenPerson1[8]=weiblich.getText();
    
        BufferedWriter out=new BufferedWriter(stream);
        out.write(datenPerson1[0].toString());
        out.write(datenPerson1[1].toString());
        out.write(datenPerson1[2].toString());
        out.write(datenPerson1[3].toString());
        out.close();} catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        else
        {
            pers2[0]=this.name1.getText();
            pers2[1]=this.land1.getText();
           pers2[2]=this.beruf1.getText();
           pers2[3]=this.wohnort1.getText();
           pers2[4]=this.haarfarbe1.getText();
           pers2[5]=this.augenfarbe1.getText();
           pers2[6]=this.groesse1.getText();
           pers2[7]=this.geburtsdatum1.getText();
        
           try{
            
                String[] datenPerson2=new String[9];
//                boolean stat=true;
            
                
                System.out.println("X1");
            
                FileWriter stream2=new FileWriter("C:\\Users\\Alexander Admin\\Desktop\\person2.txt");

                System.out.println("X2");
                datenPerson2[0]=name1.getText();
                datenPerson2[1]=land1.getText();
                datenPerson2[2]=beruf1.getText();
                datenPerson2[3]=wohnort1.getText();
                datenPerson2[4]=geburtsdatum1.getText();
                datenPerson2[5]=haarfarbe1.getText();
                datenPerson2[6]=augenfarbe1.getText();
                datenPerson2[7]=groesse1.getText();
                if(maennlich.isSelected())
                datenPerson2[8]=maennlich.getText();
                else
                    datenPerson2[8]=weiblich.getText();

                System.out.println("X3");
                BufferedWriter out2=new BufferedWriter(stream2);

                System.out.println("X4");
                out2.write(datenPerson2[4].toString());
                out2.write(datenPerson2[5].toString());
                out2.write(datenPerson2[6].toString());
                out2.write(datenPerson2[7].toString());

                System.out.println("X5");
                out2.close();

                System.out.println("X6");
                }catch(Exception e){
                System.out.println(e);
            }
        }
    }

Um Unklarheiten vorzubeugen. Die Arraya pers1 und pers2 werden natürlich im Programm selbst auch erzeugt.

Für weitere Tipps, die Daten von beiden Personen in eine Datei zu schreiben, wäre ich dankbar. 🙂[/code]
 
Zuletzt bearbeitet von einem Moderator:
Java:
        DatenPerson dp=new DatenPerson(name, land, beruf, wohnort, haarfarbe, augenfarbe, geburtsdatum, groesse, geburtsdatum);
    ........
                BufferedWriter out2=new BufferedWriter(stream2);

                System.out.println("X4");
                out2.write(datenPerson2[4].toString());
                out2.write(datenPerson2[5].toString());
                out2.write(datenPerson2[6].toString());
                out2.write(datenPerson2[7].toString());

Die Klasse "BufferedWriter" hat laut Dokumentation keine Methode, welche einfach einen String entgegen nimmt. Daher wundert mich das der Code so kompiliert und funktioniert (für eine Person).
Ist diese Klasse vom JavaFramework oder aus einer Bibliothek?

Anmerkungen:
Warum heißt denn die Klasse nicht einfach Person statt DatenPerson? (Klar sie speichert Daten einer Person, aber eine Klasse soll der Bauplan sein für ein reales Objekt -> Person). Aber das tut nichts zum Problem.
Dein if und else Block machen bis auf 2 Sachen 1:1 die gleichen Dinge. Der Unterschied besteht einfach im Dateipfad wo gespeichert werden soll und das Array welches verwendet wird.
Java:
public void setPerson(boolean stat, String name,String land,String beruf,String wohnort,String haarfarbe,String augenfarbe,String groesse,String geburtsdatum) {
   DatenPerson dp = new DatenPerson(name, land, beruf, wohnort, haarfarbe, augenfarbe, geburtsdatum, groesse, geburtsdatum);

   String filename = "";
   String[] person = null;
   if(stat) {
     filename = "person1.txt";
     person = pers1;
   } else {
     filename = "person2.txt";
     person = pers2;
   }
   
   person[0] = this.name1.getText();
   person[1] = this.land1.getText();
   person[2] = this.beruf1.getText();
   person[3] = this.wohnort1.getText();
   person[4] = this.haarfarbe1.getText();
   person[5] = this.augenfarbe1.getText();
   person[6] = this.groesse1.getText();
   person[7] = this.geburtsdatum1.getText();

   String[] datenPerson = new String[9];
   FileWriter stream;
   try {
     stream = new FileWriter("C:\\Users\\Alexander Admin\\Desktop\\" + filename);
     datenPerson[0] = name1.getText();
     datenPerson[1] = land1.getText();
     datenPerson[2] = beruf1.getText();
     datenPerson[3] = wohnort1.getText();
     datenPerson[4] = geburtsdatum1.getText();
     datenPerson[5] = haarfarbe1.getText();
     datenPerson[6] = augenfarbe1.getText();
     datenPerson[7] = groesse1.getText();
     if(maennlich.isSelected()) {
       datenPerson[8] = maennlich.getText();
     } else {
       datenPerson1[8] = weiblich.getText();
     }
     BufferedWriter out = new BufferedWriter(stream);
     out.write(datenPerson1[0].toString());
     out.write(datenPerson1[1].toString());
     out.write(datenPerson1[2].toString());
     out.write(datenPerson1[3].toString());
     out.close();
   } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
}
 
Die Klasse wird von Eclipse zur Verfügung gestellt. Also vermute ich, dass sie auch im Framwork ist. Das kann ich aber nicht genau sagen.
Nun ich hatte die Personen erst in einem Array. Zum Test habe ich dann zwei erstellt. Mit beiden Varianten funktioniert es nicht.
Da ich aber zwei Arrays habe und zwei Dateien, weiß ich jetzt nicht direkt wo der Fehler liegt.
Zu der Frage nach Person: Ich habe schon eine Klasse welche so ähnlich heißt, aber das beinhaltet, was in einer Klasse Person enthalten wäre. Diese stellt bei mir nach dem Hauptfenster das zweite GUI dar.
Also mit einem Array und mit zweien funktioniert es bei mir aktuell noch nicht... :-(
ich schau mal, ob ich noch etwas anderes ändern kann, bin aber weiter für Vorschläge offen 🙂

btw: auch mit deinem erweiterten Code funktioniert es nicht.
 
Ich habe auch nicht behauptet das es mit meinem Code nun funktioniert 😉
Mein Code sollte dir nur eine Möglichkeit zeigen deinen doppelten Code zu vereinfachen -> Vorteil weniger Code der leichter zu lesen und ändern ist.

Was genau ist dein Ziel? Die Daten, welche von an die Methode "setPerson" übergeben werden in eine Datei zu schreiben?
Mache zuerst ein neues Projekt und testen das FileWriter Example (http://examples.javacodegeeks.com/core-java/io/filewriter/java-filewriter-example/ ) zuerst in diesem. Wenn es klappt dann kannst du versuchen es auf dein Projekt/Problem zu übertragen!

Warum verwendest du eine Klasse wenn du nicht mal weißt woher sie kommt? Wie bist du denn auf diese Klasse gekommen?
Diesbezüglich solltest du dir die Grundlagen der OOP anschauen. Die Klasse oder deren Package sollte oben bei den Imports zu finden sein. (sollte das importierte Package mit "java." anfangen handelt es sich - höchstwahrscheinlich - um eine Klasse aus dem JavaFramework).
 
In deinem try-Block befüllst du datenPerson mit Daten, schreibst mit dem BufferedWriter aber die Daten aus datenPerson1. Auch bei anderen Stellen in der Methode habe ich den Verdacht, dass du datenPerson und datenPerson1 mischst. Die meisten der Parameter (alle bis auf stat) die du an die setPerson-Methode übergibst, dienen einzig dazu, die Instanz der Klasse DatenPerson, die du ganz am Anfang der setPerson() Methode erzeugst, mit Daten zu füllen. Diese Instanz wird aber zumindest in dem geposteten Code nie verwendet.
Wenn das Teil einer Hausaufgabe ist: gibt es Vorgaben, welche Klassen du verwenden musst, bzw. gibt es welche die du nicht verwenden sollst/darfst?
@Joose: Die write(String) Methode steckt in der Writer-Klasse.
 
Hier die beiden in Frage kommenden Klassen:

Java:
public class Partner extends JPanel implements ActionListener
{
    private static final long serialVersionUID = 1L;
    JButton ok,abbrechen;
    JLabel name,land,beruf,wohnort,geburtsdatum,haarfarbe,augenfarbe,groesse;
    JTextField name1,land1,beruf1,wohnort1,geburtsdatum1,haarfarbe1,augenfarbe1,groesse1;
    JRadioButton maennlich,weiblich;
    JFrame c;
    Partner p1,p2;
    boolean status;
    String [] pers1=new String[8];
    String [] pers2=new String[8];
  
    JPanel anhang,anhang2,btnGrp,buttonPanel;
    ButtonGroup bg=new ButtonGroup();
    PartnerFindenGui pfg;
    String radioSelect,ausgabe1,ausgabe2;
    DatenPerson dp,dp1,dp2;
      
    public Partner(JFrame c, JPanel anhang, boolean status)
    {
        this.status=status;
        this.c=c;
        this.anhang = anhang;
        setLayout(new GridLayout(10,2));
        add(name=new JLabel("Name: ", JLabel.RIGHT));
        add(name1=new JTextField());
        add(land=new JLabel("Land: ",JLabel.RIGHT));
        add(land1=new JTextField());
        add(beruf=new JLabel("Beruf: ",JLabel.RIGHT));
        add(beruf1=new JTextField());
        add(wohnort=new JLabel("Wohnort: ",JLabel.RIGHT));
        add(wohnort1=new JTextField());
        add(geburtsdatum=new JLabel("Geburtsdatum: ",JLabel.RIGHT));
        add(geburtsdatum1=new JTextField());
        add(haarfarbe=new JLabel("Haarfarbe: ",JLabel.RIGHT));
        add(haarfarbe1=new JTextField());
        add(augenfarbe=new JLabel("Augenfarbe: ",JLabel.RIGHT));
        add(augenfarbe1=new JTextField());
        add(groesse=new JLabel("Groesse: ",JLabel.RIGHT));
        add(groesse1=new JTextField());
        add(btnGrp=new JPanel());
        btnGrp.add(maennlich=new JRadioButton("maennlich"));
        btnGrp.add(weiblich=new JRadioButton("weiblich"));
        add(buttonPanel=new JPanel());
        buttonPanel.add(ok=new JButton("OK"));
        ok.setActionCommand("OK");
        ok.setBackground(Color.GREEN);
        ok.addActionListener(this);
        buttonPanel.add(abbrechen=new JButton("Abbrechen"));
        abbrechen.setActionCommand("Abbrechen");
        abbrechen.addActionListener(this);
        abbrechen.setBackground(Color.RED);
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent ae)
    {
            if(ae.getActionCommand().equals("OK"))
            {
            ausgabe1="Person: "+"\n"+"Name: "+this.name1.getText()+"\n"+"Land: "+this.land1.getText()+"\n"+
                    "Beruf: "+this.beruf1.getText()+"\n"+"Wohnort: "+this.wohnort1.getText()+"\n"+"Geburtsdatum: "+this.geburtsdatum1.getText()+
                    "\n"+"Haarfarbe: "+this.haarfarbe1.getText()+"\n"+"Augenfarbe: "+this.augenfarbe1.getText()+"\n"+"Groesse: "+
                    this.groesse1.getText()+"\n"+"Geschlecht: "+radioSelect
                            +"\n"+ "wurde gesetzt";
          
                setPerson(this.status, this.name1.getText(),this.land1.getText(),this.beruf1.getText(),this.wohnort1.getText(),
                    this.haarfarbe1.getText(),this.augenfarbe1.getText(),this.groesse1.getText(),this.geburtsdatum1.getText());
          
            if(maennlich.isSelected())
            {
                radioSelect=maennlich.getText();
            }
          
            if(weiblich.isSelected())
            {
                radioSelect=weiblich.getText();
            }

            JOptionPane.showMessageDialog(null, "Person: "+"\n"+"Name: "+this.name1.getText()+"\n"+"Land: "+this.land1.getText()+"\n"+
            "Beruf: "+this.beruf1.getText()+"\n"+"Wohnort: "+this.wohnort1.getText()+"\n"+"Geburtsdatum: "+this.geburtsdatum1.getText()+
            "\n"+"Haarfarbe: "+this.haarfarbe1.getText()+"\n"+"Augenfarbe: "+this.augenfarbe1.getText()+"\n"+"Groesse: "+
            this.groesse1.getText()+"\n"+"Geschlecht: "+radioSelect
                    +"\n"+ "wurde gesetzt","Meldung",JOptionPane.INFORMATION_MESSAGE);

            this.setVisible(false);
            this.anhang.setVisible(true);
        }
        if(ae.getActionCommand().equals("Abbrechen"))
        {
            c.getContentPane().remove(this);
            this.anhang.setVisible(true);
            c.repaint();
            c.dispose();
        }
      
      
    }
  
    public void setPerson(boolean stat, String name,String land,String beruf,String wohnort,String haarfarbe,String augenfarbe,String groesse,String geburtsdatum)
    {
        DatenPerson dp=new DatenPerson(name, land, beruf, wohnort, haarfarbe, augenfarbe, geburtsdatum, groesse, geburtsdatum);
      
        if(stat==true)
        {
            pers1[0]=this.name1.getText();
            pers1[1]=this.land1.getText();
            pers1[2]=this.beruf1.getText();
            pers1[3]=this.wohnort1.getText();
            pers1[4]=this.haarfarbe1.getText();
            pers1[5]=this.augenfarbe1.getText();
            pers1[6]=this.groesse1.getText();
            pers1[7]=this.geburtsdatum1.getText();
          
            String[] datenPerson1=new String[9];
            FileWriter stream;
            try {
                stream = new FileWriter("C:\\Users\\Alexander Admin\\Desktop\\person1.txt");
          
            datenPerson1[0]=name1.getText();
            datenPerson1[1]=land1.getText();
            datenPerson1[2]=beruf1.getText();
            datenPerson1[3]=wohnort1.getText();
            datenPerson1[4]=geburtsdatum1.getText();
            datenPerson1[5]=haarfarbe1.getText();
            datenPerson1[6]=augenfarbe1.getText();
            datenPerson1[7]=groesse1.getText();
            if(maennlich.isSelected())
            datenPerson1[8]=maennlich.getText();
            else
                datenPerson1[8]=weiblich.getText();
      
        BufferedWriter out=new BufferedWriter(stream);
        out.write(datenPerson1[0].toString());
        out.write(datenPerson1[1].toString());
        out.write(datenPerson1[2].toString());
        out.write(datenPerson1[3].toString());
        out.close();} catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        else
        {
            pers2[0]=this.name1.getText();
            pers2[1]=this.land1.getText();
           pers2[2]=this.beruf1.getText();
           pers2[3]=this.wohnort1.getText();
           pers2[4]=this.haarfarbe1.getText();
           pers2[5]=this.augenfarbe1.getText();
           pers2[6]=this.groesse1.getText();
           pers2[7]=this.geburtsdatum1.getText();
          
           try{
              
                String[] datenPerson2=new String[9];
//                boolean stat=true;
              
                  
                System.out.println("X1");
              
                FileWriter stream2=new FileWriter("C:\\Users\\Alexander Admin\\Desktop\\person2.txt");

                System.out.println("X2");
                datenPerson2[0]=name1.getText();
                datenPerson2[1]=land1.getText();
                datenPerson2[2]=beruf1.getText();
                datenPerson2[3]=wohnort1.getText();
                datenPerson2[4]=geburtsdatum1.getText();
                datenPerson2[5]=haarfarbe1.getText();
                datenPerson2[6]=augenfarbe1.getText();
                datenPerson2[7]=groesse1.getText();
                if(maennlich.isSelected())
                datenPerson2[8]=maennlich.getText();
                else
                    datenPerson2[8]=weiblich.getText();

                System.out.println("X3");
                BufferedWriter out2=new BufferedWriter(stream2);

                System.out.println("X4");
                out2.write(datenPerson2[4].toString());
                out2.write(datenPerson2[5].toString());
                out2.write(datenPerson2[6].toString());
                out2.write(datenPerson2[7].toString());

                System.out.println("X5");
                out2.close();

                System.out.println("X6");
                }catch(Exception e){
                    e.printStackTrace();
                System.out.println(e);
            }
        }
    }
  
    public String[] getPerson(int i)
    {
        if(i==1)
        {
            return pers1;
        }
        else
        {
            return pers2;
        }
    }
}

und

Java:
public class PartnerFindenGui extends JFrame implements ActionListener
{
    private static final long serialVersionUID = 1L;
    JButton partner1,partner2,partner1U2Anzeigen,loeschen,zurueck,abbrechen,ok;

    JPanel anhang,bildPanel;
    Container c;
    String [] pers1=new String[8];
    String [] pers2=new String[8];
    Partner p,p1;
    Partner p2;
    DatenPerson dp;
    Bild b=new Bild();
  
    //In diesem Konstruktor wird nur das Anfangsmenü geladen
    public PartnerFindenGui()
    {
        c=getContentPane();
        setSize(500, 500);
        setLocation(100, 100);
        c.add(anhang=new JPanel());
        anhang.setLayout(new GridLayout(3, 2));
        anhang.add(partner1=new JButton("Partner 1"));
        partner1.addActionListener(this);
        partner1.setActionCommand("Partner 1");
      
        anhang.add(partner2=new JButton("Partner 2"));
        partner2.addActionListener(this);
        partner2.setActionCommand("Partner 2");
      
        anhang.add(partner1U2Anzeigen=new JButton("Partner 1 und 2 anzeigen"));
        partner1U2Anzeigen.addActionListener(this);
        partner1U2Anzeigen.setActionCommand("Partner 1 und 2 anzeigen");
      
        anhang.add(loeschen=new JButton("Daten löschen"));
        loeschen.setToolTipText("Drücken Sie diese Taste um sämtliche Daten zu löschen");
        loeschen.addActionListener(this);
        loeschen.setActionCommand("Daten löschen");
      
        anhang.add(zurueck=new JButton("zurück"));
        zurueck.addActionListener(this);
        zurueck.setActionCommand("zurück");
      
        anhang.add(abbrechen=new JButton("Abbrechen"));
        abbrechen.setToolTipText("Das Progamm schließen");
        abbrechen.addActionListener(this);
        abbrechen.setActionCommand("Abbrechen");
      
        pack();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
      
        //Erst hier unten werden die Partnerobjekte im Konstruktor erstellt, damit sie hinterher, wenn das Menü
        //vorhanden ist auch zur Verfügung stehen
        //Den Partnerobjekten wird im Konstruktor jeweils der JFrame, das JPanel und der Status übergeben
        p1 = new Partner(this,anhang,true);
        p2 = new Partner(this,anhang,false);
    }
  
  
  
    public static void main(String[] args)
    {
        new PartnerFindenGui();
    }
  
    @Override
    public void actionPerformed(ActionEvent ae)
    {
        if(ae.getActionCommand().equals("Partner 1"))
        {
            //Hier wird der Titel des ersten Konstruktors durch den folgenden ersetzt
            //dann wird der erste Partner an den Container gehängt, das letzte JPanel unsichtbar gemacht und das aktuelle sichtbar
            super.setTitle("Partner 1");
            c.add(p1);
            anhang.setVisible(false);
            p1.setLocation(0,0);
            p1.setLayout(new GridLayout(11, 2));
            pack();
            p1.setVisible(true);
        }
      
        else if(ae.getActionCommand().equals("Partner 2"))
        {
            //Hier wird der Titel des ersten Konstruktors durch den folgenden ersetzt
            //dann wird der erste Partner an den Container gehängt, das letzte JPanel unsichtbar gemacht und das aktuelle sichtbar
            super.setTitle("Partner 2");
            c.add(p2);
            anhang.setVisible(false);
            p2.setLocation(0, 0);
            p2.setLayout(new GridLayout(11, 2));
            pack();
            p2.setVisible(true);
        }
        else if(ae.getActionCommand().equals("Partner 1 und 2 anzeigen"))
        {
            //Hier werden die String arrays, welche mit den Daten der Personen befüllt wurden aufgerufen
            //und jedes array einer Person zugeordnet
            pers1=p1.getPerson(1);
            pers2=p2.getPerson(2);
            //Anschließend erfolgt die Ausgabe
            JOptionPane.showMessageDialog(null,"Partner 1: "+"\n"+"Name: "+pers1[0]+"\n"
            +"Land: "+pers1[1]+"\n"+"Beruf: "+pers1[2]+"\n"+"Wohnort: "+pers1[3]+"\n"+"Haarfarbe: "+pers1[4]+"\n"
            +"Augenfarbe: "+pers1[5]+"\n"+"Groesse: "+pers1[6]+"\n"+"Geburtsdatum :"+pers1[7]+"\n"+"Geschlecht: "+p1.radioSelect+"\n"+"\n"+"\n"+
            "Partner 2: "+"\n"+"Name: "+pers2[0]+"\n"+"Land: "+pers2[1]+"\n"+"Beruf: "+pers2[2]+"\n"+"Wohnort: "+pers2[3]+"\n"
            +"Haarfarbe: "+pers2[4]+"\n"+"Augenfarbe: "+pers2[5]+"\n"+"Groesse: "+pers2[6]+"\n"+"Geburtsdatum: "+pers2[7]+"\n"
            +"Geschlecht: "+p2.radioSelect+"\n"+"\n"+"\n","Meldung",JOptionPane.INFORMATION_MESSAGE);

            if((pers1.equals(pers2))||(!pers1.equals(pers2)))
            {
                JOptionPane.showMessageDialog(null, "Person 1 "+p1.name1.getText()+" passt mit Person 2 "+p2.name1.getText());
            }
        }
        else if(ae.getActionCommand().equals("Daten löschen"))
        {
            //Hier werden über den Zugriff auf die beiden Personen, die einzelnen Daten gelöscht
            p1.name1.setText("");
            p1.land1.setText("");
            p1.beruf1.setText("");
            p1.wohnort1.setText("");
            p1.geburtsdatum1.setText("");
            p1.haarfarbe1.setText("");
            p1.augenfarbe1.setText("");
            p1.groesse1.setText("");
          
            p2.name1.setText("");
            p2.land1.setText("");
            p2.beruf1.setText("");
            p2.wohnort1.setText("");
            p2.geburtsdatum1.setText("");
            p2.haarfarbe1.setText("");
            p2.augenfarbe1.setText("");
            p2.groesse1.setText("");
          
            JOptionPane.showMessageDialog(null, "Daten erfolgreich gelöscht","Meldung",JOptionPane.INFORMATION_MESSAGE);
        }
        else if(ae.getActionCommand().equals("Abbrechen"))
        {
            dispose();
        }  
    }

Ich hoffe hiermit könnt ihr etwas rausfinden. Ich hatte eine Vermutung. Diese habe ich auch gerade ausprobiert. Die Behebung der Vermutung brachte aber auch keine Verbesserung.
Vermutung: datenPerson1[0]=pers1[0] etc. und für person2.
 
Zuletzt bearbeitet von einem Moderator:
An dem Programm schreibst du seit mindestens 1.5 Jahren (s. http://www.java-forum.org/thema/zwei-klassen-mit-textfeld-eingaben-vergleichen-und-ausgabe-erzeugen.159728/ ).
So wie es aussieht, hast du den Rat von Joose, die Grundlagen zu lernen, nicht wirklich beherzigt.
Ein paar Anmerkungen meinerseits:
1. Damals hattest du eine Klasse Person, jetzt ist davon keine Rede mehr. Oder übernimmt die Aufgabe der ehemaligen Person-Klasse jetzt DatenPerson? Dann lies das hier nochmal:
Warum heißt denn die Klasse nicht einfach Person statt DatenPerson?
2. Gehe wie damals von Joose geraten, Step by step vor. Ich würds ungefähr so machen: Klasse Person anlegen, dann Instanzen davon erstellen und in der Konsole ausgeben, dann die Eigenschaften von Person-Instanzen in einer Gui ändern, dann Instanzen von Person in einem File abspeichern.
3. Zu deinem aktuellen Code: Die Logik in der Partner-Klasse ist unnötig kompliziert. In der actionPerformed() rufst du in dem Block der mit if(ae.getActionCommand().equals("OK")) beginnt, die setPerson-Methode auf und übergibst dabei die Strings die du aus den JTextFields ausliest. Im Rumpf der setPerson-Methode verwendest du die übergebenen Strings um eine Instanz der Klasse DatenPerson anzulegen. Dann verwendest du diese Instanz aber gar nicht, sondern liest nochmal die Informationen aus den ganzen JTextFields aus und schreibst den Inhalt in die Arrays pers1 oder pers2. Dann liest du die JTextFields nochmal aus, diesmal zusammen mit dem JRadioButton mänlich, packst die Informationen in ein neues Stringarray datenPerson1 oder datenPerson2, was gegenüber pers1 und pers2 nur ein zusätzliches Feld hat (für männlich/weiblich) und die anderen Eigenschaften (Alter, Wohnort, Haarfarbe, etc.) in leicht geänderter Reihenfolge und schreibst dann die Informationen aus datenPerson1/2 teilweise raus, bei datenPerson1 die Strings an den Indices 0-3, bei datenPerson2 die Strings an den Positionen 4-7. Der Sinn des ganzen erschliesst sich mir nicht, Du hast dich da offenbar ausfs Geratewohl in ein Projekt gestürzt, was für deinen Kenntnisstand eine Nummer zu groß ist.
 
@Harry Kane: Ja, da hast du Recht. Ich habe für unterschiedliche Änderungen etc. nicht immer Zeit bzw. um Programme fortzusetzen. Aber ich versuche mich immer wieder. Auch um mich zu verbessern. Aber ja, mein Kenntnisstand ist noch nicht allzu erweitert, auch weil dies bisher ein Hobby geblieben ist, für das nicht immer Zeit da ist.
 

Zurück
Oben