package feiern;
/**
* @author Marc Heiligenstein
*
* Berechnung von Ostern, Himmelfahrt und Pfingsten nach Gauss
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Ostern extends Applet implements ActionListener {
private Thread gaussThread;
private Button knopf;
private int jahr, m, n;
//Textfelder fuer die Ein- und Ausgabe
private TextField eingabe, ostern, himmel, pfingsten;
//Label, um bisschen Beschriftung anzeigen zu koennen
private Label leingabe, lostern, lhimmel, lpfingsten;
//Bisschen Farbe
private Color blue = new Color(25, 0, 240),
red = new Color(150, 0, 50),
green = new Color(0, 100, 100);
// Merkmal um Himmelfahrt und Pfingsten ausrechnen zu koennen
private int merken = 0;
public void start() {
gaussThread = new Thread();
gaussThread.start();
}
public void init() {
//Der Layout-Manager
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setFont(new Font("Arial", Font.PLAIN, 15));
setLayout(gridbag);
//Label fuer das Jahr
c.weighty = 0.25;
c.weightx = 1.0;
leingabe = new Label("Jahreszahl: ");
gridbag.setConstraints(leingabe, c);
add(leingabe);
//Text Feld Jahreszahl-Eingabe
c.weighty = 0.25;
c.gridwidth = GridBagConstraints.REMAINDER;
eingabe = new TextField("2005", 15);
eingabe.setFont(new Font("Monospaced", Font.PLAIN, 15));
gridbag.setConstraints(eingabe, c);
add(eingabe);
//Der Knopf, der alles in Bewegung setzt
c.gridwidth = 1;
knopf = new Button("Ostern");
knopf.setBackground(green);
c.anchor = GridBagConstraints.CENTER;
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(knopf, c);
add(knopf);
//Wenn der Knopf gedrückt wird
knopf.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent h) {
knopf_actionPerformed(h);
}
});
//Ausgabe,erstmal das Label Ostern
c.gridwidth = 1;
lostern = new Label("Datum fuer Ostern: ");
gridbag.setConstraints(lostern, c);
add(lostern);
//Ausgabe Ergebnis fuer Ostern
c.gridwidth = GridBagConstraints.REMAINDER;
ostern = new TextField(15);
ostern.setEditable(false);
ostern.setForeground(blue);
gridbag.setConstraints(ostern, c);
add(ostern);
//Himmelfahrt
c.gridwidth = 1;
lhimmel = new Label("Datum fuer Himmelfahrt: ");
gridbag.setConstraints(lhimmel, c);
add(lhimmel);
//Ausgabe Ergebnis fuer Himmelfahrt
c.gridwidth = GridBagConstraints.REMAINDER;
himmel = new TextField(15);
himmel.setEditable(false);
himmel.setForeground(green);
gridbag.setConstraints(himmel, c);
add(himmel);
//Pfingsten
c.gridwidth = 1;
lpfingsten = new Label("Datum fuer Pfingsten: ");
gridbag.setConstraints(lpfingsten, c);
add(lpfingsten);
//Ausgabe Ergebnis fuer Pfingsten
c.gridwidth = GridBagConstraints.REMAINDER;
pfingsten = new TextField(15);
pfingsten.setEditable(false);
pfingsten.setForeground(red);
gridbag.setConstraints(pfingsten, c);
add(pfingsten);
}
//Wird benoetigt, da die ActionPerformed-Klasse eine innere Klasse ist.
public void actionPerformed(ActionEvent l) {
}
void knopf_actionPerformed(ActionEvent h) {
jahr = Integer.parseInt(eingabe.getText());
//hier wird die Variable Jahr eingelesen
//wenn die Jahreszahl im erlaubten Bereich ist, dann kann es losgehen
if (jahr >= 1800 && jahr <= 2199) {
//als erstes muesssen natuerlich m und n berechnet werden
if (jahr >= 1800 && jahr <= 1899) {
n = 4;
m = 23;
} else if (jahr >= 1900 && jahr <= 2099) {
n = 5;
m = 24;
} else if (jahr >= 2100 && jahr <= 2199) {
n = 6;
m = 24;
}
//Ostern berechen*********************************************************
int a = jahr % 19; // Das Jahr modulo 19,usw
int b = jahr % 4;
int c = jahr % 7;
int d = ((19 * a) + m) % 30;
int e = ((2 * b) + (4 * c) + (6 * d) + n) % 7;
//Bei dieser rechnung darf natürlich nur höchstens 31 rauskommen, da es den 32. Maerz nicht gibt
if ((22 + d + e) < 32) {
ostern.setText(22 + d + e + ". Maerz " + jahr);
merken = 1;
}
//Sonst gehen wir in den April. Hier ist der 26. April durch den 19. April zu ersetzen
else if ((d + e - 9) == 26) {
ostern.setText("19. April " + jahr);
merken = 2;
}
// Auch der 25 April ist zu ersetzen, falls noch einige Nebenbedingungen zutreffen, auf den 18. April
else if (((d + e - 9) == 25) && d == 28 && e == 6 && a >= 10) {
ostern.setText("18. April " + jahr);
merken = 3;
} else {
ostern.setText(d + e - 9 + ". April " + jahr);
merken = 0;
}
//Himmelfahrt berechnen ****************************************************
//falls Ostern in den Maerz faellt
if (merken == 1) {
int tag = 22 + d + e + 40 - 62;
himmel.setText(tag + ". Mai " + jahr);
}
//falls Ostern in den April faellt
else if (merken == 2) {
int tag = 19 + 40 - 31;
himmel.setText(tag + ". Mai " + jahr);
} else if (merken == 3) {
int tag = 18 + 40 - 31;
himmel.setText(tag + ". Mai " + jahr);
} else {
if ((d + e - 9) < 23) {
int tag = d + e - 9 + 40 - 31;
himmel.setText(tag + ". Mai " + jahr);
} else {
int tag = d + e - 9 + 40 - 62;
himmel.setText(tag + ". Juni " + jahr);
}
}
//Pfingsten berechnen**********************************************************
// falls Ostern in den Maerz faellt
if (merken == 1) {
int tag = 22 + d + e + 50 - 62;
pfingsten.setText(tag + ". Mai " + jahr);
}
//falls Ostern in den April faellt
else if (merken == 2) {
int tag = 19 + 50 - 62;
pfingsten.setText(tag + ". Juni " + jahr);
} else if (merken == 3) {
int tag = 18 + 50 - 62;
pfingsten.setText(tag + ". Juni " + jahr);
} else if (merken == 0) {
if ((d + e - 9) < 13) {
int tag = d + e - 9 + 50 - 31;
pfingsten.setText(tag + ". Mai " + jahr);
} else {
int tag = d + e - 9 + 50 - 62;
pfingsten.setText(tag + ". Juni " + jahr);
}
}
} else {
//falls die Eingabe nicht im erlaubten Bereich ist
ostern.setText("Falsche Eingabe");
himmel.setText("nur von 1800");
pfingsten.setText("bis 2199");
}
}
public void stop() {
gaussThread = null;
}
public void destroy() throws NullPointerException {
try {
gaussThread.destroy();
} catch (NullPointerException e) {
}
}
}