Hallo liebe Community,
dieser Bug bereitet mir echt Kopfzerbrechen, da ich Menüs schon in einigen Java-Programmen erfolgreich verwendet habe, und noch nie ein solches Problem hatte. Der Code ist wie folgt:
Abgesehen davon, dass das Programm natürlich noch nicht fertig ist, bereitet mir das Menü insofern Probleme, als dass der Reiter mit Caesar Chiffre, Viginere Chiffre und RSA Chiffre verschwindet, sobald der Button "Chiffrieren" gedrückt wurde.
Kommentiert man die Zeile
aus, tritt dieses Problem nicht auf. Ich hoffe jemand kennt die Ursache bzw. die Lösung für diesen Bug.
dieser Bug bereitet mir echt Kopfzerbrechen, da ich Menüs schon in einigen Java-Programmen erfolgreich verwendet habe, und noch nie ein solches Problem hatte. Der Code ist wie folgt:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JFrame;
public class KryptoTool {
public static void main(String[] arg){
new KryptoTool();
}
private TextField originalText;
private TextField keyText;
private Button encryptButton, decryptButton;
private EncryptListener EncryptWatcher;
private JFrame frame = new JFrame();
public char abc[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'Ä', 'Ö', 'Ü', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', 'ä', 'ö', 'ü', 'ß', '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', ' ', '!','-', '.' }; //dynamisches Array, beliebig erweiterbar
public KryptoTool() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,200);
frame.setResizable(false);
frame.getContentPane().setLayout(new GridLayout(3,3));
frame.getContentPane().setBackground(new Color (0xB5D1FF));
frame.getContentPane().add(new Label("hier den zu bearbeitenden Text einfügen:"));
originalText = new TextField("");
frame.getContentPane().add(originalText);
frame.getContentPane().add(new Label("hier den Schlüssel einfügen:"));
keyText = new TextField("");
frame.getContentPane().add(keyText);
encryptButton = new Button("Chiffrieren");
frame.getContentPane().add(encryptButton);
decryptButton = new Button("Dechiffrieren");
frame.getContentPane().add(decryptButton);
EncryptWatcher = new EncryptListener();
encryptButton.addActionListener(EncryptWatcher);
//Menüleiste
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu("Menü");
JMenuItem CaesarChiffre = new JMenuItem("Caesar Chiffre");
JMenuItem VigenereChiffre = new JMenuItem("Vigenère Chiffre");
JMenuItem RSAChiffre = new JMenuItem("RSA Chiffre");
//ActionListener der Menüleiste
CaesarChiffre.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
}
});
VigenereChiffre.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
}
});
RSAChiffre.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
}
});
menu.add(CaesarChiffre);
menu.add(VigenereChiffre);
menu.add(RSAChiffre);
bar.add(menu);
frame.setJMenuBar(bar);
frame.setVisible(true);
}
public class EncryptListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String keyString = keyText.getText();
char originalAsArray[] = originalText.getText().toCharArray();//Umwandlung der Eingabe in ein charArray
int key = 0;
try {
key = Integer.valueOf(keyString);//Versuch, den key String in einen Integer Umzuwandeln
} catch (NumberFormatException n) {//Wenn der key String keine Zahl (bzw. kein Integer) ist, feuert catch
originalText.setText("Der Key muss eine Zahl sein");
return;
}
char encrypted[] = new char[originalAsArray.length];//Array zum Speichern des verschlüsselten Textes wird erstellt
for (int b = 0; b < originalAsArray.length; b++) {
char c = originalAsArray[b];//für jeden char im zu verschlüsselnden CharArray wird die Schleife ausgeführt
for (int i = 0; i < abc.length; i++) {
if (c == abc[i]){//sucht den char im array abc[]
int position = i;
position += key;//der Schlüssel wird zum zu verschlüsselnden Buchstaben addiert
position = position % abc.length;//der Modulo der Länge des Alphabets bzw. des Arrays wird berechnet, um innerhalb des Arrays zu bleiben
while (position < 0) position += abc.length;//negative Moduloergebnisse werden ausgeschlossen
encrypted[b] = abc[position];//dem verschlüsselten Zahlenwert wird der passende Buchstabe zugeordnet, und dieser wird im Array encrypted gespeichert
break;
} else if (i == abc.length - 1) {
//char nicht im Alphabet bzw. im Array
encrypted[b] = '?';
}
}
}
originalText.setText(String.valueOf(encrypted));//das charArray mit dem verschlüsselten Text wird als String im Eingabefeld ausgegeben
}
}
}
Abgesehen davon, dass das Programm natürlich noch nicht fertig ist, bereitet mir das Menü insofern Probleme, als dass der Reiter mit Caesar Chiffre, Viginere Chiffre und RSA Chiffre verschwindet, sobald der Button "Chiffrieren" gedrückt wurde.
Kommentiert man die Zeile
Java:
originalText.setText(String.valueOf(encrypted));//das charArray mit dem verschlüsselten Text
Zuletzt bearbeitet: