Hi,
ich habe vor, mir einen kleinen Texteditor zu basteln. In diesen moechte ich das Feature einbauen, dass bei bei geaendertem Text der Speichern-Button aktiv wird und wenn der Text gespeichert wurde/der Inhalt nicht veraendert wurde, der Button inaktiv wird.
Da es ja aus Performance-Gruenden Quatsch ist, den kompletten Text zwischenzuspeichern und ihn bei jedem Tastendruck mit der jetzigen Version zu vergleichen, will ich das ganze mit MD5-Hashs loesen.
Bei jedem Tastendruck soll der Anfangshash mit dem aktuellen Hash verglichen werden.
Leider geht das ganze programmiertechnisch nicht so fix wie z.B. in PHP ( md5("abc") ), also hab ich mir folgendes zusammengebastelt:
So bekomme ich einen MD5-Hash:
So wird der MD5-Wert des Ursprungsinhaltes geholt:
So ueberpruefe ich, ob der Anfangs-MD5-Wert derselbe wie der jetzige ist.
tfContent ist ein JTextArea
Und schlussendlich in ein Key-Typed-Event eingebunden:
Jetzt ist halt das Problem, dass das ganze nicht funktioniert. Mal aktiviert er den Button, mal nicht. Hat auf jeden Fall was mit den Hashwerten zutun!
ich habe vor, mir einen kleinen Texteditor zu basteln. In diesen moechte ich das Feature einbauen, dass bei bei geaendertem Text der Speichern-Button aktiv wird und wenn der Text gespeichert wurde/der Inhalt nicht veraendert wurde, der Button inaktiv wird.
Da es ja aus Performance-Gruenden Quatsch ist, den kompletten Text zwischenzuspeichern und ihn bei jedem Tastendruck mit der jetzigen Version zu vergleichen, will ich das ganze mit MD5-Hashs loesen.
Bei jedem Tastendruck soll der Anfangshash mit dem aktuellen Hash verglichen werden.
Leider geht das ganze programmiertechnisch nicht so fix wie z.B. in PHP ( md5("abc") ), also hab ich mir folgendes zusammengebastelt:
So bekomme ich einen MD5-Hash:
Java:
/**
* Returns a string MD5-Hash for a given string
*/
public String getMD5ForString(String string) {
try {
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(string.getBytes());
byte[] hash = digest.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
hexString.append(Integer.toHexString(0xFF & hash[i]));
}
return hexString.toString();
}
catch (NoSuchAlgorithmException e) {
System.err.println(e);
System.exit(0);
return null;
}
}
So wird der MD5-Wert des Ursprungsinhaltes geholt:
Java:
public void loadFile(String path) throws FileNotFoundException, IOException {
file = new File(path);
if (!file.exists() || !file.isFile()) throw new FileNotFoundException();
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
String line = bufferedReader.readLine();
tfContent.append(line);
while (line != null) {
tfContent.append("\n" + line);
line = bufferedReader.readLine();
}
fileContentHash = getMD5ForString(tfContent.getText());
bufferedReader.close();
}
So ueberpruefe ich, ob der Anfangs-MD5-Wert derselbe wie der jetzige ist.
tfContent ist ein JTextArea
Java:
public boolean contentChanged() {
if (fileContentHash.equals(getMD5ForString(tfContent.getText())))
return true;
else
return false;
}
Und schlussendlich in ein Key-Typed-Event eingebunden:
Java:
private void tfContentKeyTyped(java.awt.event.KeyEvent evt) {
if (contentChanged())
btSave.setEnabled(true);
else
btSave.setEnabled(false);
}
Jetzt ist halt das Problem, dass das ganze nicht funktioniert. Mal aktiviert er den Button, mal nicht. Hat auf jeden Fall was mit den Hashwerten zutun!