RJSKryp for JavaFX 1.01
Der Quelltext
RJSKryp.fx
/*
* RJSKryp.fx
*
* Created on 02.01.2009, 11:33:02
*/
package rjskryp;
import java.lang.System;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.ext.swing.SwingButton;
import javafx.ext.swing.SwingHorizontalAlignment;
import javafx.ext.swing.SwingLabel;
import javafx.ext.swing.SwingSlider;
import javafx.ext.swing.SwingTextField;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
import javax.swing.JFileChooser;
import rjskryp.Kodier;
/**
* @author Ralph Steyer - RJS EDV-KnowHow - www.rjs.de
* Kodierungsprogramm mit JavaFX Script
*
* Hauptprogramm - die GUI im Wesentlichen mit JavaFX Script, die Kodierung selbst Java
*
* Das Programm verwendet zum Kodieren und Dekodieren von Dateien einen Verschlüsselungs-
* und Entschlüsselungalgorithmus, der auf einer Verschiebung
* der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf
* Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher
* Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt:
* für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um
* einen festen Parameter versetztes Zeichen.
*/
var scale = 1.0;
var color = Color.SILVER;
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
KeyFrame {
time: 10s
canSkip: true
values: [
scale => -1.0 tween Interpolator.EASEBOTH
color => Color.BLUE
]
}
]
}.play();
var f = new JFileChooser(); // Eine Swing-Komponente aus javax.swing
var label1=SwingLabel {
font:Font{
name:"Tahoma"
size: 25
}
text: "RJSKryp for JavaFX - Version 1.01 - www.rjs.de"
foreground:Color.SILVER
horizontalAlignment:SwingHorizontalAlignment.CENTER
width:600
}
var meinSlider=SwingSlider {
minimum: 0
maximum: 255
value: 3
vertical: false
}
var buttonGruppe=HBox{
spacing: 10
translateY:50
translateX:100
content:[
SwingButton {
text: "Kodieren"
action: function() {
var returnVal = f.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var quelle = f.getSelectedFile();
returnVal = f.showSaveDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var ziel = f.getSelectedFile();
if (ziel.exists()) then {
nachrichten1.text =
"Achtung! Zieldatei schon vorhanden. Vorgang wird abgebrochen";
}
else {
nachrichten1.text ="Verarbeitung läuft";
nachrichten2.text ="";
if (
new Kodier().kodiere(quelle, ziel, true,meinSlider.value) == 0) then {
nachrichten1.text =
"Verarbeitete Datei:\n {quelle}";
nachrichten2.text =
"Erstellte Datei:\n {ziel}";
}
else {
nachrichten1.text="Fehler bei der Verarbeitung";
}
}
}
}
else {
nachrichten1.text ="";
nachrichten2.text ="";
}
}
},
SwingButton {
text: "Dekodieren"
action: function() {
nachrichten1.text ="Verarbeitung läuft";
nachrichten2.text ="";
var returnVal = f.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var quelle = f.getSelectedFile();
returnVal = f.showSaveDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
var ziel = f.getSelectedFile();
new Kodier().kodiere(quelle, ziel, false,meinSlider.value);
}
}
}
},
SwingButton {
text: "Ende"
action: function() {
System.exit(0);
}
}
,
meinSlider
]
}
var verschiebung=SwingLabel {
text: bind "Verschiebungsfaktor: {meinSlider.value}"
foreground:Color.SILVER
translateX:400
translateY:80
font:Font{
name:"Tahoma"
size: 12
}
width:300
}
var nachrichten1=SwingTextField {
columns: 10
text: ""
editable: false
translateX:10
translateY:150
foreground:Color.RED
font:Font{
name:"Tahoma"
size: 12
}
width:575
height:20
background:Color.SILVER
}
var nachrichten2=SwingTextField {
columns: 10
text: ""
editable: false
translateX:10
translateY:170
foreground:Color.RED
font:Font{
name:"Tahoma"
size: 12
}
width:575
height:20
background:Color.SILVER
}
Stage {
title: "RJSKryp for JavaFX - Version 1.01 - www.rjs.de"
width: 600
height: 400
scene: Scene {
fill:RadialGradient {
centerX: 375
centerY: 175
radius: 390
proportional: false
stops: [
Stop {
offset: 0.0
color: Color.BLUE},
Stop {
offset: 1.0
color: Color.BLACK}
] // stops
} // RadialGradient
content: [VBox{
spacing: 10
content:[
label1
]
},
buttonGruppe,
verschiebung,
nachrichten1,
nachrichten2,
Text {
translateX:200
translateY:150
font: Font {
size: 14
}
x: 110,
y: 90
textAlignment: TextAlignment.CENTER
content:"RJS EDV-KnowHow\n\nCopyright: Ralph Steyer\nInternet: www.rjs.de - www.javafx-buch.de\nBlog: rjsedv.blogspot.com"
fill: bind color
effect: DropShadow {
offsetX: 10
offsetY:5
color: Color.color(0.2, 0.2, 0.1)
}; // DropShadow
transforms: Scale{
x: 1
y: bind scale
pivotX: 100,
pivotY: 100
} // Scale
} //Text
]
}
visible:true
}
Kodier.java
package rjskryp;
/**
* @author Ralph Steyer - RJS EDV-KnowHow - www.rjs.de
* Kodierungsprogramm mit JavaFX Script
* Java-Klasse zur Bereitstellung der Dateizugriffe und der eigentlichen Kodierung
*/
import java.io.*;
public class Kodier {
/**
* Die Methode zum Kodieren und Dekodieren. Dazu wird ein Verschlüsselungs-
* und Entschlüsselungalgorithmus implementiert, der auf einer Verschiebung
* der Zeichenkodierung basiert. Der verwendete Algorithmus ist auf
* Grundlage der Cäsar-Chiffre konzipiert. Dies ist ein einfacher
* Verschiebungsalgorithmus. Diese Verschlüsselungsmethode lautet wie folgt:
* für jeden im Quelltext vorkommendes Zeichen setze im Chiffretext einen um
* einen festen Parameter versetztes Zeichen.
*
* Als Übergabeargumente werden die Quelldatei und Zieldatei sowie ein Flag
* zur Steuerung, ob Kodieren oder Dekodieren, und die Verschiebung
* angegeben
*
* @param quelle2
* zu kodierende oder dekodierende Datei
* @param ziel2
* die Zieldatei mit dem veränderten Inhalt
* @param kodieren
* Angabe ob kodieren (true) oder dekodiern (false)
* @param verschiebung
* Faktor der Verschiebung
*/
public int kodiere(File quelle2, File ziel2, boolean kodieren,
int verschiebung) {
// Erstellen eines Eingabe- und eines
// Ausgabestroms.
// Quelle nur zum Lesen öffnen
RandomAccessFile quelle=null, ziel=null;
try {
quelle = new RandomAccessFile(quelle2, "r");
ziel = new RandomAccessFile(ziel2, "rw");
while (true) {
// Einlesen eines Bytes aus der Quelle
byte b = (byte) quelle.readByte();
/*
* Hier findet die Verschiebung statt. Wir kümmern uns selbst um
* den Wertebereich von dem Datentyp byte, indem wir den
* Modulo-Operator verwenden.
*/
if (kodieren)
b = (byte) ((b + verschiebung));
else
b = (byte) ((b - verschiebung));
// Schreiben eines Bytes in die Zieldatei
ziel.writeByte(b);
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
return 1;
}
// Dateiende der Quelldatei erreicht.
catch (EOFException e) {
try {
quelle.close();
ziel.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return 0;
} catch (IOException e) {
return 2;
}
}
}
| Dipl. Math. Ralph Steyer - Fon 0171/5489948 - Fax 06198/577653 - E-Mail: ralph.steyer@rjs.de - www.rjs.de |