Problem mit TextFeld Array

dehlen

Bekanntes Mitglied
Hallo habe leider mal wieder ein Problem .... folgendes : Ich habe ein JMenu mit einem Reiter Optionen
darin habe ich wiederum 2 MenuItem nämliche Öffnen und Sichern.
Desweiteren habe ich 3 TextFelder.
Beim Speichern soll er die eingetragenen Werte der TextFelder in eine TextDatei schreiben, er schreibt aber immer nur den Wert des 3 Textfeldes in eine TextDatei.

Beim Öffnen hakt es auch noch ein bisschen. Er soll wenn Öffnen ausgewählt wurde das 1Wort des TextDatei in das erste Textfeld schreiben das zweite Wort der TextDatei ins zweite TextFeld usw.
Das auslesen der TextDatei funktioniert aber ich kriege leider es nicht hin die TextFelder so zu befüllen wie ich es will. Im moment so wie ich es jetzt habe wird nur das letzte wort ins 3 Textfeld geschrieben was ja auch richtig ist aber die anderen beiden fehlen halt noch.
Wäre dankbar für Ratschläge!

Java:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.datatransfer.*; //Bibliothek um auf die Zwischenablage zuzugreifen
import java.util.*;
import java.io.*;


public class VigenereFrame 
{
//Komponenten werden deklariert

JTextField eingabe,schluesselfeld,ausgabe;
JButton entschluesseln,verschluesseln,ok,leeren,kopieren,back;
JLabel oben,mitte,unten,textlabel,textlabel1,textlabel2;
JFrame fenster;
JDialog dialog; //lokale Variabel damit der ActionListener auf den Dialog zugreifen kann
JDialog popup = dialog;//wird der Klassenvariablen popup des Datentypes JDialogs der dialog übergeben
private String zufälligesWort;
JMenu menu;
JFileChooser filechooser = new JFileChooser();
ArrayList words = new ArrayList();


JTextField[] Felder;

String input;
int[] zahl;
String schluessel;

public void button_create() { //Methode um die Buttons des JFrames zu erstellen
//Frame hat kein vordefiniertes Layout


//Buttons deklarieren
verschluesseln = new JButton("encode");
verschluesseln.setFont(new Font("Arial", Font.PLAIN, 11));
entschluesseln = new JButton("decode");
entschluesseln.setFont(new Font("Arial", Font.PLAIN, 11));
back = new JButton("Zum Menü");
back.setFont(new Font("Arial", Font.PLAIN, 11));

fenster.setLayout(null);

//Layout der Buttons bestimmen
entschluesseln.setBounds(25,25,80,50);
verschluesseln.setBounds(25,90,80,50);
back.setBounds(25,155,80,50);


//Buttons bekommen einen ActionListener
Listener_entschluesseln Encoding = new Listener_entschluesseln();
Listener_verschluesseln Decoding = new Listener_verschluesseln();
Listener_back Back = new Listener_back();
entschluesseln.addActionListener(Encoding);
verschluesseln.addActionListener(Decoding);
back.addActionListener(Back);

fenster.add(verschluesseln);
fenster.add(entschluesseln);
fenster.add(back);

}
    
private void textfield_create() //selbe wie bei Buttons nur für die Textfelder
{


}



    
private void label_create() { //selbe wie bei Buttons nur mit den Labels
fenster.setLayout(null);

oben = new JLabel("zu verschluesselnder Text");
mitte = new JLabel("Schluesselwort");
unten = new JLabel("entschluesselter Text");
     
oben.setBounds(127,10,230,15);
mitte.setBounds(127,78,230,15);
unten.setBounds(127,143,230,15);
     
        fenster.add(oben);
        fenster.add(mitte);
        fenster.add(unten);

    }

    class Listener_entschluesseln implements ActionListener { //ActionListener wird aufgerufen
        public void actionPerformed(ActionEvent e) {//ActionEvent
            input= Felder[0].getText(); //in der Variabel input wird der Text aus dem Textfeld eingabe gespeichert
input = input.toUpperCase();//Buchstaben werden groß geschrieben damit der Algorithmus zum verschlüsseln funktioniert
schluessel = Felder[1].getText();
schluessel = schluessel.toUpperCase();
Vigenere Buchstabe = new Vigenere(schluessel);//neues Objekt wird erstellt und der Wertz schluessel wird übergeben
StringBuilder output = new StringBuilder();//neuen StringBuilder erstellen
       
//char i deklariert eine Variable, die ein Element aus dem Array festhält.
//Bei jedem Schleifendurchlauf enthält die Variable ein anderes Element aus dem Array 
//bis es keine Elemente mehr gibt durch das toCharArray wird der String zum CharArray

for(char i : input.toCharArray())
            
//Die einzelnen Buchstaben werden mit Hilfe des Schlüssels den wir durch das Objekt Buchstabe haben 
//und dem Verschlüsselungs Methodenaufruf durch .encode verschlüsselt und in dem String output gespeichert
output.append(Buchstabe.decode(i));
Felder[2].setText(""+output);//Der verschlüsselte Text wird in dem Textfeld ausgabe ausgegeben
            

              
   
        
    }
}

//siehe ActionListener oben (das selbe nur mit .decode)
class Listener_verschluesseln implements ActionListener {
public void actionPerformed(ActionEvent e) {

input= Felder[0].getText();
input = input.toUpperCase();
schluessel =Felder[1].getText();
schluessel = schluessel.toUpperCase();
Vigenere Buchstabe = new Vigenere(schluessel);
StringBuilder output = new StringBuilder();
String ausgabetext = new String(output);
       
for(char i : input.toCharArray())
output.append(Buchstabe.encode(i));
            
Felder[2].setText(""+output);


 }
    }
    
    class Listener_back implements ActionListener {
public void actionPerformed(ActionEvent e) {
try
        {
            Runtime.getRuntime().exec("java -jar Menu.jar");
        } catch(Exception ex)
        {
            
        }
        System.exit(0);

}
}
    
    
        



public VigenereFrame() { 
fenster = new JFrame("Vigenere-Verschluesselung"); //neuer JFrame - das Fenster
fenster.setSize(450,300);
fenster.setLocation(512,400);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button_create();
textfield_create();
label_create();




JMenuBar menuBar = new JMenuBar();
fenster.setJMenuBar (menuBar);
JMenu fileMenu = new JMenu ("Optionen");
menuBar.add (fileMenu);

JMenu keyMenu = new JMenu ("Schluessel");
menuBar.add (keyMenu);
JMenuItem saveItem = new JMenuItem ("Speichern",new ImageIcon ("save.png"));
fileMenu.add (saveItem);

JMenuItem openItem = new JMenuItem ("Öffnen",new ImageIcon ("open.png"));
fileMenu.add (openItem);

JMenuItem genItem = new JMenuItem ("Schluessel generieren");
keyMenu.add (genItem);
JMenuItem chooseItem = new JMenuItem ("Eigenen Schluessel aus Textdatei");
keyMenu.add (chooseItem);
final JTextField Felder[] = new JTextField[3];
for (int i = 0; i<Felder.length; i++)
{
Felder[i] = new JTextField();

Felder[0]=new JTextField("");
Felder[1]=new JTextField("");
Felder[2]=new JTextField("");

Felder[0].setBounds(125, 25, 290, 50);
Felder[1].setBounds(125,90,290,50);
Felder[2].setBounds(125,155,290,50);
fenster.add(Felder[i]);
}
      

chooseItem.addActionListener (new ActionListener()
{



         public void actionPerformed (ActionEvent e) 

         {


    
try {
JFileChooser filechooser = new JFileChooser();            
filechooser.setDialogTitle("Datei öffnen");
int druck = filechooser.showOpenDialog(null);
 
if(druck == JFileChooser.APPROVE_OPTION ){
File file = filechooser.getSelectedFile();
 
        BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()));
 
        String zeile;
while((zeile = br.readLine()) != null) {
        String[] wx = zeile.split(" ");
        for (String s: wx) {
            words.add(s);
            zahl = new int[words.size()];
            Random zufall = new Random();
            for (int i=0; i<words.size(); i++) {
            zahl[i] = zufall.nextInt(words.size());
            Felder[1].setText(""+words.get(zahl[i]));
                

        
}
}
       }
}
 
} catch (IOException ioe) {
        ioe.printStackTrace();
}

}
      });


genItem.addActionListener (new ActionListener()

      {

         public void actionPerformed (ActionEvent e) 

         { 
             // Wortliste
                String str = "computer|radio|taschenrechner|lehrer|polizei|praesident|subjekt|land|umwelt|software|informatik|java|applet|hangman";
                String[] temp;
                
                // der Begrenzer
                String delimiter = "\\|";
                
                //String wird geteilt immer beim Begrenzer
                temp = str.split(delimiter);
                
        //Zufallsgenerator
        Random randomGenerator = new Random();
                
        //zufällige Nummer erstellen
        int randomInt = randomGenerator.nextInt(temp.length);

                zufälligesWort = new String(temp[randomInt]);

                



                Felder[1].setText(""+zufälligesWort);
  

         }

      });



JMenuItem delItem = new JMenuItem ("Textfelder leeren",new ImageIcon ("clear.png"));
fileMenu.add (delItem);
JMenuItem copyItem = new JMenuItem ("Entschlüsselten Text kopieren",new ImageIcon ("copy.png"));
fileMenu.add (copyItem);
fileMenu.addSeparator();
JMenuItem exitItem = new JMenuItem ("Schließen", new ImageIcon ("stop.png"));
fileMenu.add (exitItem);

JMenu gotoMenu = new JMenu ("GoTo");
menuBar.add (gotoMenu);

JMenuItem rsaItem = new JMenuItem ("Rsa");
gotoMenu.add (rsaItem);

JMenuItem caesarItem = new JMenuItem ("Caesar");
gotoMenu.add (caesarItem);

saveItem.addActionListener (new ActionListener()

      {

         public void actionPerformed (ActionEvent e) 

         {

        JFileChooser filechooser = new JFileChooser();            
filechooser.setDialogTitle("Datei speichern unter");
int druck = filechooser.showSaveDialog(null);
 
if(druck == JFileChooser.APPROVE_OPTION ){
File file = filechooser.getSelectedFile();

try {
            BufferedWriter out = new BufferedWriter(new FileWriter(file.getAbsolutePath()));

          
            out.write(" \n"+Felder[0].getText());
            out.write(" \n"+Felder[1].getText());
            out.write(" \n"+Felder[2].getText());
         
            out.close();
        
        } catch (IOException ep) {
        }
    }

         }

      });

      
      openItem.addActionListener (new ActionListener()
      
      {

         public void actionPerformed (ActionEvent e) 

         {

             try {
JFileChooser filechooser = new JFileChooser();            
filechooser.setDialogTitle("Datei öffnen");
int druck = filechooser.showOpenDialog(null);
 
if(druck == JFileChooser.APPROVE_OPTION ){
File file = filechooser.getSelectedFile();
 
        BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()));
 
String zeile;
while((zeile = br.readLine()) != null) {
        String[] wx = zeile.split(" ");
        for (String s: wx) {
            words.add(s);
            for (int i = 0; i < words.size(); i++) {
           Felder[i].setText(""+words.get(i));
           
        
        }


}
       }
    }
}
    
 catch (IOException ioe) {
        ioe.printStackTrace();
}
             
             }

      });

rsaItem.addActionListener (new ActionListener()

      {

         public void actionPerformed (ActionEvent e) 

         {

           try
        {
            Runtime.getRuntime().exec("java -jar Rsa.jar");
        } catch(Exception ex)
        {
            
        }
        System.exit(0);

         }

      });
      
      caesarItem.addActionListener (new ActionListener()

      {

         public void actionPerformed (ActionEvent e) 

         {
try
        {
            Runtime.getRuntime().exec("java -jar Caesar.jar");
        } catch(Exception ex)
        {
            
        }
        System.exit(0);

         }

      });


 exitItem.addActionListener (new ActionListener()

      {

         public void actionPerformed (ActionEvent e) 

         {

            // Frame unsichtbar machen.

            fenster.setVisible (false);

         }

      });
      delItem.addActionListener (new ActionListener()
      {

         public void actionPerformed (ActionEvent e) 

         {

            Felder[0].setText(""); 
     Felder[1].setText("");
Felder[2].setText("");

         }

      });
      copyItem.addActionListener (new ActionListener()
      {

         public void actionPerformed (ActionEvent e) 

         {

                   
Clipboard clip=Toolkit.getDefaultToolkit().getSystemClipboard(); //greife auf die Zwischenablage zu
StringSelection selection=new StringSelection(Felder[2].getText());//neuw StringSelection
clip.setContents(selection,null);//String Selection (ausgabe.getText()) wird in die Zwischenablage geschrieben


         }

      });

fenster.setVisible(true);


        }
    


//erstelle neues VigenereFrame - durch MainMethode ist die Einbindung in eine .jar Anwendung möglich
//wichtig da die IDE nicht genug Zugriffsrechte hat (Zugriff auf die Zwischenablage)
public static void main(String[] args) {
VigenereFrame g = new VigenereFrame(); 
 
       
    }
  


}

EDIT: Merke gerade das meine Verschlüsselung und Entschlüsselung auch nicht mehr klappt, weil ich mit diesem TextArray irgendwie nicht klar komme.
Poste mal eben den ganzen Code damit ihr besser versteht was ich meine und mir gegebenfalls dann helfen könnt.
 
Zuletzt bearbeitet:
könntest du vielleicht den Code mal so formatieren, dass man auf anhieb sieht welche klammern wohin gehören!?

...
Java:
private void textfield_create() //selbe wie bei Buttons nur für die Textfelder
{
 
 
}

das kannst du auch angeben, auf die paar zeilen kommts auch net an
 
schließe mich meinem vorredner an. So kann man den Code nur schwer lesen. Zu der nichtvorhandenen Formatierung gesellt sich noch das schlimmste ignorieren von Konventionen das ich hier im Forum bisher gesehen habe, du solltest dir diese unbedingt mal anschauen (siehe meine Signatur)!
 
😱

*augenkrebs* 😛
  1. Zeile 329. ich würde noch mit
    Code:
    out.flush()
    versuchen.
  2. benutze doch einfach
    Code:
    implements ActionListener
    dann hast du nur eine Methode in der du mit e.getSource() Komponente zuordnen und entsprechend behandeln kannst.
  3. Wenn du so unübersichtlich deinen Code gestaltest, dann findest du einen Fehler mit nur enorm viel Aufwand.
    Mache extra Methode
    Code:
    saveFromJTextFields()
    und poste bitte diese.
  4. Von Zeile 158 bis Zeile: 480 alles im KONSTRUKTOR? :shock:
    am besten speichere die Klasse irgendwo auf der Festplatte und schau sie dir später (in paar Monaten ) an 🙂

gruß
 
OK also hier die entsprechenden Stellen wo es wohl den Fehler gibt:
Java:
//Um das TextFeld zu erstellen
final JTextField Felder[] = new JTextField[3];
for (int i = 0; i<Felder.length; i++)
{
Felder[i] = new JTextField();

Felder[0]=new JTextField("Eingabe");
Felder[1]=new JTextField("Schluessel");
Felder[2]=new JTextField("");

Felder[0].setBounds(125, 25, 290, 50);
Felder[1].setBounds(125,90,290,50);
Felder[2].setBounds(125,155,290,50);
fenster.add(Felder[i]);
}


//Datei Speichern - Fehlerhaft hier wird nur das Wort des 3 Textfeldes in eine TextDatei geschrieben
saveItem.addActionListener (new ActionListener()

      {

         public void actionPerformed (ActionEvent e) 

         {

        JFileChooser filechooser = new JFileChooser();            
filechooser.setDialogTitle("Datei speichern unter");
int druck = filechooser.showSaveDialog(null);
 
if(druck == JFileChooser.APPROVE_OPTION ){
File file = filechooser.getSelectedFile();

try {
            BufferedWriter out = new BufferedWriter(new FileWriter(file.getAbsolutePath()));

          
            out.write(" \n"+Felder[0].getText());
            out.write(" \n"+Felder[1].getText());
            out.write(" \n"+Felder[2].getText());
         
            out.close();
        
        } catch (IOException ep) {
        }
    }

         }

      });


//Datei öffnen - Fehlerhaft hier wird nur das letzte Wort der TextDatei ausgelesen
 openItem.addActionListener (new ActionListener()
      
      {

         public void actionPerformed (ActionEvent e) 

         {

             try {
JFileChooser filechooser = new JFileChooser();            
filechooser.setDialogTitle("Datei öffnen");
int druck = filechooser.showOpenDialog(null);
 
if(druck == JFileChooser.APPROVE_OPTION ){
File file = filechooser.getSelectedFile();
 
        BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()));
 
String zeile;
while((zeile = br.readLine()) != null) {
        String[] wx = zeile.split(" ");
        for (String s: wx) {
            words.add(s);
            for (int i = 0; i < words.size(); i++) {
           Felder[i].setText(""+words.get(i));
           
        
        }


}
       }
    }
}
    
 catch (IOException ioe) {
        ioe.printStackTrace();
}
             
             }

      });

Alle anderen Methoden z.B verschluesseln klappen auch nicht mehr , da ich irgendeinen Fehler mache beim Zugreifen auf die Textfelder
wenn ich anstatt dem TextFelder Array drei TextFelder erstelle und das dann versuche klappt das ver-entschluesseln und das speichern perfekt aber dann klappt das öffnen nicht mehr -.- daher hatte ich den Tipp bekommen das ich ein TextFeldArray bräuchte
 
wenn du mir noch mal sagst, was das für eine Klasse
Code:
Vigenere
ist...werde ich dir -heute abend helfen.
 
also willst du jetzt den Source Code von meiner Klasse Vigenere wo die Algorithmen zur Ver und Entschluesselung drin stehen ?
Ps also gibt es keinen Weg das ohne ein TextFeld Array zu lösen ?
habe hier noch meinen Versuch mit normalen 3 TextFeldern da klappt das Speichern wunderbar nur das Öffnen klappt nicht ganz
Java:
saveItem.addActionListener (new ActionListener()
 
      {
 
         public void actionPerformed (ActionEvent e) 
 
         {
 
        JFileChooser filechooser = new JFileChooser();            
filechooser.setDialogTitle("Datei speichern unter");
int druck = filechooser.showSaveDialog(null);
 
if(druck == JFileChooser.APPROVE_OPTION ){
File file = filechooser.getSelectedFile();
 
try {
            BufferedWriter out = new BufferedWriter(new FileWriter(file.getAbsolutePath()));
 
          
            out.write(" \n"+eingabe.getText());
            out.write(" \n"+schluesselfeld.getText());
            out.write(" \n"+ausgabe.getText());
         
            out.close();
        
        } catch (IOException ep) {
        }
    }
 
         }
 
      });
 
 
//Datei öffnen - Fehlerhaft hier wird nur das letzte Wort der TextDatei ausgelesen
 openItem.addActionListener (new ActionListener()
      
      {
 
         public void actionPerformed (ActionEvent e) 
 
         {
 
             try {
JFileChooser filechooser = new JFileChooser();            
filechooser.setDialogTitle("Datei öffnen");
int druck = filechooser.showOpenDialog(null);
 
if(druck == JFileChooser.APPROVE_OPTION ){
File file = filechooser.getSelectedFile();
 
        BufferedReader br = new BufferedReader(new FileReader(file.getAbsolutePath()));
 
String zeile;
while((zeile = br.readLine()) != null) {
        String[] wx = zeile.split(" ");
        for (String s: wx) {
            words.add(s);
            for (int i = 0; i < words.size(); i++) {
            eingabe.setText(""+words.get(i));  //HIER MUSS WAS GEÄNDERT WERDEN
            schluesselfeld.setText(""+words.get(i));
            ausgabe.setText(""+words.get(i));
           
        
        }
 
 
}
       }
    }
}
    
 catch (IOException ioe) {
        ioe.printStackTrace();
}
             
             }
 
      });



private void textfield_create() 
{
fenster.setLayout(null);

    
eingabe = new JTextField("");
schluesselfeld = new JTextField("");
ausgabe = new JTextField("");
           
eingabe.setBounds(125, 25, 290, 50);
schluesselfeld.setBounds(125,90,290,50);
ausgabe.setBounds(125,155,290,50);

fenster.add(eingabe);
fenster.add(ausgabe);
fenster.add(schluesselfeld);

}
 
Zuletzt bearbeitet:
wie gesagt das groesste Problem ist deinen Code zu entschlüsseln...

Soweit ich weiss, sollen im Konstruktor nur ganz wenige Sachen steht, da während des "konstruieren" wird irgendwas in JVM blockiert (falls jemand mehr davon weiß bitte um aufklärenung, weiß nicht mehr was es war 🙂 )

Bitte hilf uns dir zu Helfen, wenn du Eclipse hast, drücke Strg+Shift+F und poste den Code noch mal. 😳
 
Ok habe es in Eclipse nun einrücken lassen die Textfelder in eine Seperate Methode anstatt in den Konstruktor dann habe ich die JMenuItems geordner und auch in eine seperate Methode hoffe man kann es nun etwas besser erkennen

achja und habe das TextFeld Array gelöscht und stattdessen drei Textfelder gemacht, da ich mit dem TextFeld Array nicht klar kam aber ich denke ich brauche es um mein Problem zu lösen .. naja also hier mal ohne
:
Java:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.*;
import java.io.*;

public class VigenereFrame {
	

	JTextField eingabe, schluesselfeld, ausgabe;
	JButton entschluesseln, verschluesseln,back;
	JLabel oben, mitte, unten;
	JFrame fenster;
	
	private String zufälligesWort;
	JMenu menu;
	JFileChooser filechooser = new JFileChooser();
	ArrayList words = new ArrayList();

	String input;
	int[] zahl;
	String schluessel;

	public void button_create() {
		

		
		verschluesseln = new JButton("encode");
		verschluesseln.setFont(new Font("Arial", Font.PLAIN, 11));
		entschluesseln = new JButton("decode");
		entschluesseln.setFont(new Font("Arial", Font.PLAIN, 11));
		back = new JButton("Zum Menü");
		back.setFont(new Font("Arial", Font.PLAIN, 11));

		fenster.setLayout(null);

		
		entschluesseln.setBounds(25, 25, 80, 50);
		verschluesseln.setBounds(25, 90, 80, 50);
		back.setBounds(25, 155, 80, 50);

		
		Listener_entschluesseln Encoding = new Listener_entschluesseln();
		Listener_verschluesseln Decoding = new Listener_verschluesseln();
		Listener_back Back = new Listener_back();
		entschluesseln.addActionListener(Encoding);
		verschluesseln.addActionListener(Decoding);
		back.addActionListener(Back);

		fenster.add(verschluesseln);
		fenster.add(entschluesseln);
		fenster.add(back);

	}

	private void textfield_create() 
	{
		fenster.setLayout(null);

		eingabe = new JTextField("");
		schluesselfeld = new JTextField("");
		ausgabe = new JTextField("");

		eingabe.setBounds(125, 25, 290, 50);
		schluesselfeld.setBounds(125, 90, 290, 50);
		ausgabe.setBounds(125, 155, 290, 50);

		fenster.add(eingabe);
		fenster.add(ausgabe);
		fenster.add(schluesselfeld);

	}

	private void label_create() { 
		fenster.setLayout(null);

		oben = new JLabel("zu verschluesselnder Text");
		mitte = new JLabel("Schluesselwort");
		unten = new JLabel("entschluesselter Text");

		oben.setBounds(127, 10, 230, 15);
		mitte.setBounds(127, 78, 230, 15);
		unten.setBounds(127, 143, 230, 15);

		fenster.add(oben);
		fenster.add(mitte);
		fenster.add(unten);

	}
	
	private void menu_create() {
		
		JMenuBar menuBar = new JMenuBar();
		fenster.setJMenuBar(menuBar);
		
		JMenu fileMenu = new JMenu("Optionen");
		menuBar.add(fileMenu);

		JMenu keyMenu = new JMenu("Schluessel");
		menuBar.add(keyMenu);
		
		JMenu gotoMenu = new JMenu("GoTo");
		menuBar.add(gotoMenu);

		JMenuItem genItem = new JMenuItem("Schluessel generieren");
		keyMenu.add(genItem);
		
		JMenuItem chooseItem = new JMenuItem("Eigenen Schluessel aus Textdatei");
		keyMenu.add(chooseItem);

		JMenuItem saveItem = new JMenuItem("Speichern", new ImageIcon(
				"save.png"));
		fileMenu.add(saveItem);

		JMenuItem openItem = new JMenuItem("Öffnen", new ImageIcon("open.png"));
		fileMenu.add(openItem);
		
		JMenuItem delItem = new JMenuItem("Textfelder leeren", new ImageIcon("clear.png"));
        fileMenu.add(delItem);
        
        JMenuItem copyItem = new JMenuItem("Entschlüsselten Text kopieren",new ImageIcon("copy.png"));
        fileMenu.add(copyItem);
        
        fileMenu.addSeparator();
        
        JMenuItem exitItem = new JMenuItem("Schließen", new ImageIcon("stop.png"));
        fileMenu.add(exitItem);

        JMenuItem rsaItem = new JMenuItem("Rsa");
        gotoMenu.add(rsaItem);

        JMenuItem caesarItem = new JMenuItem("Caesar");
        gotoMenu.add(caesarItem);

               //Speichern
		saveItem.addActionListener(new ActionListener()

		{

			public void actionPerformed(ActionEvent e)

			{

				JFileChooser filechooser = new JFileChooser();
				filechooser.setDialogTitle("Datei speichern unter");
				int druck = filechooser.showSaveDialog(null);

				if (druck == JFileChooser.APPROVE_OPTION) {
					File file = filechooser.getSelectedFile();

					try {
						BufferedWriter out = new BufferedWriter(new FileWriter(
								file.getAbsolutePath()));

						out.write(" \n" + eingabe.getText());
						out.write(" \n" + schluesselfeld.getText());
						out.write(" \n" + ausgabe.getText());

						out.close();

					} catch (IOException ep) {
					}
				}

			}

		});

		// Datei öffnen - Fehlerhaft hier wird nur das letzte Wort der TextDatei
		// ausgelesen
		openItem.addActionListener(new ActionListener()

		{

			public void actionPerformed(ActionEvent e)

			{

				try {
					JFileChooser filechooser = new JFileChooser();
					filechooser.setDialogTitle("Datei öffnen");
					int druck = filechooser.showOpenDialog(null);

					if (druck == JFileChooser.APPROVE_OPTION) {
						File file = filechooser.getSelectedFile();

						BufferedReader br = new BufferedReader(new FileReader(
								file.getAbsolutePath()));

						String zeile;
						while ((zeile = br.readLine()) != null) {
							String[] wx = zeile.split(" ");
							for (String s : wx) {
								words.add(s);
								for (int i = 0; i < words.size(); i++) {
									eingabe.setText("" + words.get(i));//HIER IST DER FEHLER
									schluesselfeld.setText("" + words.get(i));
									ausgabe.setText("" + words.get(i));

								}

							}
						}
					}
				}

				catch (IOException ioe) {
					ioe.printStackTrace();
				}

			}

		});

		chooseItem.addActionListener(new ActionListener()

		{

			public void actionPerformed(ActionEvent e)

			{

				try {
					JFileChooser filechooser = new JFileChooser();
					filechooser.setDialogTitle("Datei öffnen");
					int druck = filechooser.showOpenDialog(null);

					if (druck == JFileChooser.APPROVE_OPTION) {
						File file = filechooser.getSelectedFile();

						BufferedReader br = new BufferedReader(new FileReader(
								file.getAbsolutePath()));

						String zeile;
						while ((zeile = br.readLine()) != null) {
							String[] wx = zeile.split(" ");
							for (String s : wx) {
								words.add(s);
								zahl = new int[words.size()];
								Random zufall = new Random();
								for (int i = 0; i < words.size(); i++) {
									zahl[i] = zufall.nextInt(words.size());
									schluesselfeld.setText(""
											+ words.get(zahl[i]));

								}
							}
						}
					}

				} catch (IOException ioe) {
					ioe.printStackTrace();
				}

			}
		});

		genItem.addActionListener(new ActionListener()

		{

			public void actionPerformed(ActionEvent e)

			{
				
				String str = "computer|radio|taschenrechner|lehrer|polizei|praesident|subjekt|land|umwelt|software|informatik|java|applet|hangman";
				String[] temp;

				
				String delimiter = "\\|";

				
				temp = str.split(delimiter);

				
				Random randomGenerator = new Random();

				
				int randomInt = randomGenerator.nextInt(temp.length);

				zufälligesWort = new String(temp[randomInt]);

				schluesselfeld.setText("" + zufälligesWort);

			}

		});

		

		rsaItem.addActionListener(new ActionListener()

		{

			public void actionPerformed(ActionEvent e)

			{

				try {
					Runtime.getRuntime().exec("java -jar Rsa.jar");
				} catch (Exception ex) {

				}
				System.exit(0);

			}

		});

		caesarItem.addActionListener(new ActionListener()

		{

			public void actionPerformed(ActionEvent e)

			{
				try {
					Runtime.getRuntime().exec("java -jar Caesar.jar");
				} catch (Exception ex) {

				}
				System.exit(0);

			}

		});

		exitItem.addActionListener(new ActionListener()

		{

			public void actionPerformed(ActionEvent e)

			{

				

				fenster.setVisible(false);

			}

		});
		delItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e)

			{

				eingabe.setText("");
				schluesselfeld.setText("");
				ausgabe.setText("");

			}

		});
		copyItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e)

			{

				Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); 
				StringSelection selection = new StringSelection(ausgabe.getText());
				clip.setContents(selection, null);
													

			}

		});
	}
	class Listener_entschluesseln implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			input = eingabe.getText(); 
										
			input = input.toUpperCase();
										
			schluessel = schluesselfeld.getText();
			schluessel = schluessel.toUpperCase();
			Vigenere Buchstabe = new Vigenere(schluessel);
			StringBuilder output = new StringBuilder();
                        for (char i : input.toCharArray())
                        output.append(Buchstabe.decode(i));
			ausgabe.setText("" + output);

		}
	}

	// siehe ActionListener oben (das selbe nur mit .decode)
	class Listener_verschluesseln implements ActionListener {
		public void actionPerformed(ActionEvent e) {

			input = eingabe.getText();
			input = input.toUpperCase();
			schluessel = schluesselfeld.getText();
			schluessel = schluessel.toUpperCase();
			Vigenere Buchstabe = new Vigenere(schluessel);
			StringBuilder output = new StringBuilder();
			String ausgabetext = new String(output);

			for (char i : input.toCharArray())
				output.append(Buchstabe.encode(i));

			ausgabe.setText("" + output);

		}
	}

	class Listener_back implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			try {
				Runtime.getRuntime().exec("java -jar Menu.jar");
			} catch (Exception ex) {

			}
			System.exit(0);

		}
	}

	public VigenereFrame() {
		fenster = new JFrame("Vigenere-Verschluesselung"); 
		fenster.setSize(450, 300);
		fenster.setLocation(512, 400);
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button_create();
		textfield_create();
		label_create();
		menu_create();

		

		fenster.setVisible(true);

	}


	public static void main(String[] args) {
		VigenereFrame g = new VigenereFrame();

	}

}
 
Java:
String zeile;
while((zeile = br.readLine()) != null) {
    String[] wx = zeile.split(" ");
    for (String s: wx) {
        words.add(s);
        for (int i = 0; i < words.size(); i++) {
            eingabe.setText(""+words.get(i));
            schluesselfeld.setText(""+words.get(i));
            ausgabe.setText(""+words.get(i));
        }
    }
}

wir nicht zufällig in ALLEN textfeldern das selbe (letzte) wort der datei abgelegt?
wenn ja, dann geh das doch mal schritt für schritt mit papier und bleistift durch!

pauschal würde ich sagen ists so:

du liest die erste zeile ein, die is leer (siehe dein speichern-algorithmus) .. nix sinnvolles passiert

du liest die 2. zeile ein, dort befindet sich eine wortfolge drin (die aus eingabe) .. das wird nun in alle felder geschrieben (da words ja nur 1 wort beinhaltet im moment)

du liest die 3. zeile ein, dort befindet sich wieder eine wortfolge (die aus schluesselfeld) .. die for-schleife trägt nun erneut erst in alle felder die wortfolge aus der 2. zeile ein, danach (ist ja noch ein weiterer eintrag in words enthalten) .. trägt es die zweite wortfolge aus der dritten zeile in alle felder ein

.. analog vierte zeile, am ende steht die 3. wortfolge aus der 4. zeile der textdatei (ursprünglich ausgabe-textfeld) in allen textfeldern!


das is nur n problem der abfolge .. geh das nochmal im kopf durch dann wirst du die lösung selbst finden
 
Zuletzt bearbeitet:
Ja das er das so macht war mir auch klar das words.get(i); war mehr ein Platzhalter
allerdings weis ich nicht wie ich auf die einzelnen Komponente der ArrayList zugreifen kann sodass ich dem Programm sagen kann nehme das erste wort der arraylist und schreibe es in eingabe und dann nimm das zweite wort des arraylist und schreibe es in schluesselfeld
hatte es so versucht eingabe.setText(""+words.get(1)); aber das hat auch nicht funktioniert .. auf dem Blatt weis ich es nur ich weiß nicht wie ich es dem Programm sagen soll
 
du musst dir in dem fall eh erstma einig werden ob du nun ein Array von Textfeldern hast oder nicht, machbar ist es allemal!

Java:
/* beim coden fiel mir grad auf .. warum splittest du den input nach leerzeichen?
 * damit erhältst du im zweifel mehr einträge in der word-arrayList als du textfelder hast 
 */

String zeile;
while((zeile = br.readLine()) != null) {
    if (! zeile.trim().equals(""))
        words.add(zeile);
}

for (int i = 0; i < words.size(); i++) {
    felder[i].setText(words.get(i));
}

/* funktioniert aber nur, wenn du wirklich exakt soviele einträge in words hast, wie textfelder,
 * und wenn du sicherstellst, das felder[0] immer eingabe oder was auch immer ist, das hängt
 * davon ab in welcher reihenfolge du die daten abspeicherst. Hier wird also erster String in erstes
 * Feld gelegt! Zweiter String in 2. Feld, etc.
 * 
 * weiterhin  solltest du beim speichern erst den Textinhalt und dann den zeilenumbruch angeben ..
 * du hast momentan am anfang eine leerzeile. ich habe das erstmal abgefangen und ignoriere leere 
 * zeilen, inwiefern das für dich ok ist, musst du selbst wissen
 */

oder du machst es ohne array

Java:
String zeile;
while((zeile = br.readLine()) != null) {
    if (! zeile.trim().equals(""))
        words.add(zeile);
}

if (words.size() == 3) {
    eingabe.setText(words.get(0));
    schluesselfeld.setText(words.get(1));
    ausgabe.setText(words.get(2));
}

/* auch hier gilt, die prüfung bezüglich inhalt der zeilen (leerzeilen erlaubt oder nich!?) ..
 * in dem code werden leerzeilen ignoriert 
 */


EDIT: man könnte die krücke über die words-arraylist im 1. Codebeispiel auch weglassen und zeile direkt in die textfelder eintragen, wenn man sich eine zählvariable zuhilfe nimmt.
 
Zuletzt bearbeitet:
ah super perfekt habe mich für letzteres entschieden und klappt wunderbar =)
hm ja die TextDatei hat immer genau so viele Strings wie ich Textfelder habe daran habe ich gedacht hatte das schon so ähnlich versucht nur eben mit ner for Schleife anstatt einer if und dann hatte er es immer überschrieben
Danke auf jeden Fall!!
 
Ah verdammt zu früh gefreut -.-
also das öffnen klappt zwar aber nur solange ich die Textfelder nicht per "Textfelder leeren" leere.
Sprich : das öffnen klappt aber sobald ich die Textfelder mit dem von mir eingebauten MenuItem lösche klappt das Öffnen nicht mehr. Lösche ich den Text manuell aus den Felder klappt alles. Weiß jemand woran das liegt ?
 
kannst du mal aktuelleren code reinstellen, oder mach n anhang .. oben werden noch felder genutzt beim löschen unten beim öffnen, direkter zugriff .. kann zwar unwichtig sein, aber ein aktueller überblick würde helfen ^^
 
Hm hat sich wie von Geisterhand selbst gelöst habe nun ein GridLayout hinzugefügt anstatt des setLayout(null); und jetzt klappt auf einmal .. keine Ahnung warum naja mit solls recht sein ;-)
 

Zurück
Oben