# Caesar-Chiffre JBuilder



## ChrisNeedsHelp (21. Jun 2010)

Hallo alle miteinander. Ich habe ein "kleines" Problem und hoffe ihr könnt mir helfen....
Also:
Unser Lehrer kam auf die schlaue Idee, mit uns Projekte zu machen. Dieses Projekt besteht dadrin, dass wir innerhalb von 2 Monaten ein Programm schreiben müssen unserer Wahl. Ich habe mich damals leichtfertig für ein Programm entschieden, welches die Caesar-Chiffre ausführt, weil ich dachte, dass das einfach sein wird. Caesar-Chiffre ist im Prinzip auch einfach, nur sind die Leute, die Informatik damals gewählt haben weil sie's interessant finden und nciht, weil sie sich aktiv schon vorher mit Programmierung und co. beschäftigt haben ziemlich aufgeschmissen. Das einzigste, was wir bekommen haben war das Buch "Java für Kids" von Hans-Georg Schumann. Der Lehrer meinte, wenn wir das durcharbeiten sollten wir unsere Aufgaben erledigen können. Gesagt, getan, nur ist der Titel des Buches Programm (Am Anfang wird erklärt, wie man mit der Maus auf etwas zeigt) und konnte mir kaum weiterhelfen. In dem Buch enthalten ist eine CD, auf der "JBuilder 2" drauf ist. Mit diesem Programm sollen wir auch arbeiten. Als ich bemerkt habe, dass das Buch nichts bringt, habe ich mir etliche Videos im Internet über dieses Thema angeschaut und im Unterricht die ganze Zeit nach Tutorials gesucht. Das Problem hierbei ist, dass kein Mensch dabei den JBuilder benutzt. Sie machen irgendetwas mit Klassen, was ich mitlerwele auch verstehe, aber das nützt mir nichts... Die 2 Monate sind in einer Woche vorbei und deshalb fange ich langsam an zu verzweifeln. Wäre sehr unschön, wenn ich eine 6 dafür bekommen würde   Ich habe bis gestern eigentlich immer noch Hoffnung gehabt dass ich was finde aber vergebens.

Also um nicht weiter um den heißen Brei rum zu reden:
Kennt irgendjemand ein Tutorial oder sonstwas, wo ich nachschlagen kann wie man das macht (oder kann das villeicht hier irgendeiner programmieren)? Ich hoffe, dass ist nicht zuviel verlangt... Es muss nur funktionieren.

Ich hoffe ihr könnt mir helfen...

Mit freundlichen Grüßen
Chris


----------



## Gast2 (21. Jun 2010)

Wie weit bist du denn schon gekommen? Poste doch mal deinen aktuellen Code.

Wenn du konkrete Fragen hast wird dir hier sicherlich weitergeholfen, aber das komplette Programm wird wohl niemand für dich schreiben.
Ein bißchen eigeninitiative muss schon da sin


----------



## Appleleptiker (22. Jun 2010)

Hallo,

 ich hab's mal gemacht, da ich weiß, dass Informatiklehrer oft ihre Schüler mit den Aufgaben überfordern. 
Damit Du nicht ganz tatenlos bleibst, kannst Du das Dechiffrieren allerdings selber lösen (Exakt dasselbe Prinzip wie das Chiffrieren, nur halt nicht mit dem Chiffrier-ABC als Prüftabelle, sondern dem Normalen, als kleine Hilfestellung) und darfst die Lösung auch noch abtippen, geb' sie Dir nur als Bild heraus. :bae:

http://img691.imageshack.us/img691/484/bildschirmfoto20100622u.png


----------



## ChrisNeedsHelp (22. Jun 2010)

Danke an Appleleptiker für deine Mühe, aber das ist wieder das mit den Klassen. Mit Klassen haben wir noch nie gearbeitet, ausserdem muss da ein Programm bei rauskommen, wo es 3 Textfelder gibt und einen Button... in textField1 gibt man den Originaltext ein, in textField2 sollte der chiffrierte Text rauskommen und in textField3 muss der Schlüssel drinn stehen... wenn man auf button1 klickt, sollte das Programm anfangen zu chiffrieren... Du hast übrigens auch ein ganz anderes Programm als ich... Ich muss irgendwie auf einer Registerkarte "Design" das spätere fenster gestalten, und wenn ich zum Beispiel dann dort auf button1 doppelklicke, wechselt der zum Quelltext und es kommt 

```
void button1_actionPerformed (ActionEvent  e) {

   }
}
```

Dadrunter muss man dann eingeben, was der machen soll, wenn man da draufdrückt. In meinem Fall eben chiffrieren. 
Ich habe nichts desto trotz das trotzdem mal versuch und bei mir kommt:
?Fehler: (39) Variable dechiffriert nicht gefundenin class unbenannt3.Caesar.
?Fehler: (45) Variable dechiffriert nicht gefundenin class unbenannt3.Caesar.


----------



## dhachim (22. Jun 2010)

ChrisNeedsHelp hat gesagt.:


> Danke an Appleleptiker für deine Mühe, aber das ist wieder das mit den Klassen. Mit Klassen haben wir noch nie gearbeitet


Ich glaube schon  
Wenn dich die zwei Klassen irritieren, dann kopier die main() Methode in die Caesar Klasse. 
Ich schätze nicht nur Lehrer überfordern Schüler, auch Appleleptiker 

Da musst du ganz vorne Anfangen schätze ich. 

Das das Bild bei dir anders aussieht, als beim Appleleptiker liegt daran, dass er Eclipse statt JBuilder 2 verwendet. Was aber völlig egal ist. Das ändert nix am Programm. Diese Schreibunterlagen nennt man Entwicklungsumgebungen. Du nutzt eben eine andere, was hinten rauskommt ist das Selbe. 

So was sollst du also tun:

Baue eine GUI, grafische Oberfläche,1x JFrame, 1xJPanel,  3x JTextField, 1xJButton
lies einen Text von einem Textfeld ein
lies den Schlüssel ein
registriere einen ActionListener an deinem Button
übergebe beides an deine Chiffriermethode in der actionPerformed() Methode 
trage das Ergebnis in das Ergebnistextfeld ein

infos zu den GUI Komponenten findest du Java Platform SE 6 in dem Paket javax.swing.

So damit solltest du ne Weile auskommen 

Das ist ungefähr so das was du nach und nach machen solltest. Du kannst auch zuerst alles in der Konsole machen, ohne grafische Oberfläche. Später kannst du diese dann nachträglich hinzufügen, und deine Logik einweben.


----------



## Tomate_Salat (22. Jun 2010)

Ist zwar nicht so meine Art, aber ich habe dir eine simple GUI geschrieben, da du sonst nicht mehr fertig wirst:

ChiffreGUI.java

```
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class ChiffreGUI 	
{
	public final static int BREITE_DES_TEXTFELDES	= 400; 		// Diesen Wert anpassen um die Breite des Feldes zu ändern
	
	private JFrame	frame;
	private JTextField	txtOriginal, txtChiffre;
	private JSpinner	spinnerSteps;
	private JButton		btnDoChiffre;
	
	private ChiffreListener	listener;
	
	public ChiffreGUI()
    {
		frame	= new JFrame("Caesar Chiffre");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		initGui();
    }
	
	private void initGui()
	{
		txtOriginal	= new JTextField();
		txtChiffre		= new JTextField();
		txtChiffre.setEditable(false);
		
		Dimension size	= new Dimension(BREITE_DES_TEXTFELDES, 20);
		txtOriginal.setPreferredSize(size);
		txtChiffre.setPreferredSize(size);
		
		spinnerSteps		= new JSpinner();
		spinnerSteps.addChangeListener(new ChangeListener()
		{
			@Override
			public void stateChanged(ChangeEvent arg0)
			{
				if(Integer.parseInt(spinnerSteps.getValue().toString()) < 0)
					spinnerSteps.setValue(0);
			}
		});
		
		btnDoChiffre	= new JButton("Chiffriere es");
		btnDoChiffre.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				if(listener != null)
					txtChiffre.setText( listener.setGuiData(txtOriginal.getText().trim(), Integer.parseInt(spinnerSteps.getValue().toString())));
			}
		});
		
		frame.add(txtOriginal, BorderLayout.WEST);
		frame.add(txtChiffre, BorderLayout.CENTER);
		frame.add(spinnerSteps, BorderLayout.EAST);
		frame.add(btnDoChiffre, BorderLayout.SOUTH);
	}
	
	public void setListener(ChiffreListener listener)
	{
		this.listener	= listener;
	}	
	
	public void open()
	{
		SwingUtilities.invokeLater(new Runnable()
		{
			@Override
			public void run()
			{
				frame.pack();
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}
}
```

ChiffreListener.java

```
public interface ChiffreListener
{
	public String setGuiData(String original, int steps);	
}
```

Anwendungsbeispiel:

```
ChiffreGUI 		gui			= new ChiffreGUI();
ChiffreListener	listener	= new ChiffreListener()
{
	@Override
	public String setGuiData(String original, int steps)
	{
         	return original + " um " + steps + " verschieben ;-)";
	}
};
gui.setListener(listener);
gui.open();
```

Du musst darauf achten: ChiffreGUI.java und ChiffreListener.java dürfen in keinem Package liegen, sonst musst du das anpassen. Sie sind auch so ausgelegt, dass beide in dem selben Paket derzeit liegen müssen. Alles was du machen musst ist die Methode setGuiData anzupassen, damit Sie den Chiffrierten text zurückliefert. 

Und zum Thema Klassen noch nicht durchgenommen: ihr sollt GUI programmierung betreiben, dürft aber keinen klassen nehmen?! Sag einfach du könntest es schon 

MFG

Tomate_Salat


----------



## Appleleptiker (22. Jun 2010)

ChrisNeedsHelp hat gesagt.:


> Danke an Appleleptiker für deine Mühe, aber das ist wieder das mit den Klassen. Mit Klassen haben wir noch nie gearbeitet



Hallo Chris,

Du sagtest am Anfang, das Prinzip der Klassen würdest Du verstehen. Deswegen hab ich auch gleich mal mit Klassen gearbeitet. Im Prinzip sollte es aber kein Problem sein, die Methoden dort rauszukopieren und mal ein bisschen zu probieren und zu tricksen, was man nun anders machen muss, damit das Ganze ohne Klassen läuft.

Lade Dir doch mal Eclipse herunter und probier mal, eine neues Projekt anzulegen und den Quelltext 1:1 (inkl. Klassennamen) dort zu übernehmen.

Dass Euer Informatiklehrer wollte, dass Ihr ohne Klassen, aber dann mit GUI programmieren sollt, ist dann schon etwas krass. Kannst Deinem Lehrer sagen, dass ich als Student des 2. Fachsemesters ihn damit offiziell als disqualifiziert erkläre .



> ?Fehler: (39) Variable dechiffriert nicht gefundenin class unbenannt3.Caesar.
> ?Fehler: (45) Variable dechiffriert nicht gefundenin class unbenannt3.Caesar.



Ohne Deinen Quelltext kann ich mit diesen Fehlermeldungen leider nicht sehr viel mehr sagen, außer dem, was dort steht.


----------

