// Created on 11.08.2005
package calculator;
//@author s_moeller
import java.awt.event.*;
import javax.swing.*;
public class Gegeben extends JFrame implements ItemListener {
JRadioButton[] klick;
JTextField[] werte, grund;
JButton neu;
int markiert, klicks;
JMenuBar menue;
JMenu menuDatei, menuBearbeiten, menuHelp, ausgabe, eingabe, kontakt;
JMenuItem konfig, neurechnen, close, exit, hilfe, version, konSimon,
konFabian;
JRadioButtonMenuItem[] aus, ein;
ButtonGroup gruppe1, gruppe2;
public void itemStateChanged(ItemEvent e) {
if (e.getSource() == klick[0]) {
if (klick[0].isSelected()) {
werte[0].setText(JOptionPane.showInputDialog(this,
"Geben Sie den Radius in cm ein"));
}
markiert += 1;
}
if (e.getSource() == klick[1]) {
if (klick[1].isSelected()) {
werte[1].setText(JOptionPane.showInputDialog(this,
"Geben Sie Seite A in cm ein"));
}
markiert += 1;
}
if (e.getSource() == klick[2]) {
if (klick[2].isSelected()) {
werte[2].setText(JOptionPane.showInputDialog(this,
"Geben Sie Seite B in cm ein"));
}
markiert += 1;
}
if (e.getSource() == klick[3]) {
if (klick[3].isSelected()) {
werte[3].setText(JOptionPane.showInputDialog(this,
"Geben Sie Seite C in cm ein"));
}
markiert += 1;
}
if (e.getSource() == klick[4]) {
if (klick[4].isSelected()) {
werte[4].setText(JOptionPane.showInputDialog(this,
"Geben Sie den Durchmesser in cm ein"));
}
markiert += 1;
}
if (e.getSource() == klick[5]) {
if (klick[5].isSelected()) {
werte[5].setText(JOptionPane.showInputDialog(this,
"Geben Sie den Umfang in cm ein"));
}
markiert += 1;
}
if (e.getSource() == klick[6]) {
if (klick[6].isSelected()) {
werte[6].setText(JOptionPane.showInputDialog(this,
"Geben Sie die (Ober-)Fäche in cm² ein"));
}
markiert += 1;
}
if (e.getSource() == klick[7]) {
if (klick[7].isSelected()) {
werte[7].setText(JOptionPane.showInputDialog(this,
"Geben Sie das Volumen in cm³ ein"));
}
markiert += 1;
}
// Berechnung für Kreis
try {
if (klicks == 1 & markiert == 1) {
for (int i = 0; i <= 14; i++) {
klick[i].setEnabled(false);
}
// wenn der Radius gegeben ist
if (klick[0].isSelected()) {
double r = Double.parseDouble(werte[0].getText());
werte[4].setText(Double.toString(Runden.runde(2 * r)));
werte[5].setText(Double.toString(Runden.runde(Math.PI * 2
* r)));
werte[6].setText(Double.toString(Runden.runde(Math
.pow(r, 2)
* Math.PI)));
}
// wenn der Durchmesser gegeben ist
if (klick[4].isSelected()) {
double d = Double.parseDouble(werte[4].getText());
werte[0].setText(Double.toString(Runden.runde(d / 2)));
werte[5]
.setText(Double.toString(Runden.runde(Math.PI * d)));
werte[6].setText(Double.toString(Runden.runde(Math.pow(
d / 2, 2)
* Math.PI)));
}
// wenn der Umfang gegeben ist
if (klick[5].isSelected()) {
double u = Double.parseDouble(werte[5].getText());
werte[0].setText(Double.toString(Runden.runde(u / Math.PI
/ 2)));
werte[4]
.setText(Double.toString(Runden.runde(u / Math.PI)));
werte[6].setText(Double.toString(Runden.runde(Math
.pow(u, 2)
/ 4 * Math.PI)));
}
// wenn Fläche gegeben ist
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
werte[0].setText(Double.toString(Runden.runde(Math.pow(f
/ Math.PI, 0.5))));
werte[4].setText(Double.toString(Runden.runde(Math.pow(
(f / Math.PI), 0.5) * 2)));
werte[5].setText(Double.toString(Runden.runde(2 - Math.pow(
f * Math.PI, 0.5))));
}
}
// Berechnung für Rechteck
if (klicks == 2 & markiert == 2) {
for (int i = 0; i <= 14; i++) {
klick[i].setEnabled(false);
}
// wenn die Seite A gegeben ist
if (klick[1].isSelected()) {
double x = Double.parseDouble(werte[1].getText());
if (klick[2].isSelected()) {
double y = Double.parseDouble(werte[2].getText());
werte[5].setText(Double.toString(Runden.runde(2 * x + 2
* y)));
werte[6].setText(Double.toString(Runden.runde(x * y)));
}
if (klick[5].isSelected()) {
double u = Double.parseDouble(werte[5].getText());
werte[2].setText(Double.toString(Runden
.runde((u - x / 2) / 2)));
werte[6].setText(Double.toString(Runden
.runde((u - x / 2) * x)));
}
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
werte[2].setText(Double.toString(Runden.runde(f / x)));
werte[5].setText(Double.toString(Runden.runde(f / x * 2
+ x * 2)));
}
}
// wenn die Seite B gegeben ist
if (klick[2].isSelected() & !klick[1].isSelected()) {
double y = Double.parseDouble(werte[2].getText());
if (klick[5].isSelected()) {
double u = Double.parseDouble(werte[5].getText());
werte[1].setText(Double.toString(Runden
.runde((u - 2 * y) / 2)));
werte[6].setText(Double.toString(Runden
.runde((u - 2 * y) / 2 * y)));
}
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
werte[1].setText(Double.toString(Runden.runde(f / y)));
werte[5].setText(Double.toString(Runden.runde(f / y * 2
+ y * 2)));
}
}
// wenn der Umfang gegeben ist
if (klick[5].isSelected() & !klick[1].isSelected()
& !klick[2].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
werte[1].setText(Double
.toString(Runden.runde(Math.sqrt(f))));
werte[2].setText(Double
.toString(Runden.runde(Math.sqrt(f))));
JOptionPane
.showMessageDialog(
this,
"Da mit Fläche und Umfang keine Seiten eines Rechtecks berechnet werden kann, wurde das Ergebnis der Seiten für ein Quadrat eingefügt");
}
// wenn Fläche gegeben ist
// wurde schon vorher berechnet
}
// Berechnung für Quadrat
if (klicks == 3 & markiert == 1) {
for (int i = 0; i <= 14; i++) {
klick[i].setEnabled(false);
}
// wenn die Seite gegeben ist
if (klick[1].isSelected()) {
double x = Double.parseDouble(werte[1].getText());
werte[5].setText(Double.toString(Runden.runde(x * 4)));
werte[6].setText(Double.toString(Runden.runde(x * x)));
}
// wenn der Umfang gegeben ist
if (klick[5].isSelected()) {
double u = Double.parseDouble(werte[5].getText());
werte[1].setText(Double.toString(Runden.runde(u / 4)));
werte[6].setText(Double.toString(Runden.runde((u / 4)
* (u / 4))));
}
// wenn Fläche gegeben ist
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
werte[1].setText(Double
.toString(Runden.runde(Math.sqrt(f))));
werte[5].setText(Double.toString(Runden
.runde(Math.sqrt(f) * 4)));
}
}
// Berechnung für Kreis
if (klicks == 4 & markiert == 1) {
for (int i = 0; i <= 14; i++) {
klick[i].setEnabled(false);
}
// wenn der Radius gegeben ist
if (klick[0].isSelected()) {
double r = Double.parseDouble(werte[0].getText());
double v = 0.75 * Math.pow(r, 3) * Math.PI;
double f = 4 * Math.pow(r, 2) * Math.PI;
werte[4].setText(Double.toString(Runden.runde(r * 2)));
werte[7].setText(Double.toString(Runden.runde(v)));
werte[6].setText(Double.toString(Runden.runde(f)));
}
// wenn der Durchmesser gegeben ist
if (klick[1].isSelected()) {
double d = Double.parseDouble(werte[4].getText());
double r = d / 2;
double v = 0.75 * Math.pow(r, 3) * Math.PI;
double f = 4 * Math.pow(r, 2) * Math.PI;
werte[0].setText(Double.toString(Runden.runde(r)));
werte[7].setText(Double.toString(Runden.runde(v)));
werte[6].setText(Double.toString(Runden.runde(f)));
}
// wenn das Volumen gegeben ist
if (klick[7].isSelected()) {
double v = Double.parseDouble(werte[7].getText());
double r = Math.pow(v / Math.PI / 0.75, 1 / 3.);
double f = 4 * Math.pow(r, 2) * Math.PI;
werte[0].setText(Double.toString(Runden.runde(r)));
werte[4].setText(Double.toString(Runden.runde(r * 2)));
werte[6].setText(Double.toString(Runden.runde(f)));
}
// wenn Oberfläche gegeben ist
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
double r = Math.sqrt(f / Math.PI / 4);
double v = 0.75 * Math.pow(r, 3) * Math.PI;
werte[0].setText(Double.toString(Runden.runde(r)));
werte[4].setText(Double.toString(Runden.runde(r * 2)));
werte[7].setText(Double.toString(Runden.runde(v)));
}
}
// Berechnung für Quader
if (klicks == 5 & markiert == 3) {
for (int i = 0; i <= 14; i++) {
klick[i].setEnabled(false);
}
// wenn die Seite A gegeben ist
if (klick[1].isSelected()) {
double x = Double.parseDouble(werte[1].getText());
// wenn die Seiten A + B gegeben sind
if (klick[2].isSelected()) {
double y = Double.parseDouble(werte[2].getText());
// wenn die Seiten A + B + C gegeben sind
if (klick[3].isSelected()) {
double z = Double.parseDouble(werte[3].getText());
werte[7].setText(Double.toString(Runden.runde(x * y
* z)));
werte[6].setText(Double.toString(Runden
.runde((x * y) * 2 + (x * z) * 2 + (z * y)
* 2)));
}
// wenn die Seiten A + B und das Volumen gegeben sind
if (klick[7].isSelected()) {
double v = Double.parseDouble(werte[7].getText());
werte[3].setText(Double.toString(Runden.runde(v
/ (x * y))));
werte[6].setText(Double.toString(Runden
.runde((x * y) * 2 + (x * v / (x * y)) * 2
+ (v / (x * y) * y) * 2)));
}
// wenn die Seiten A + B und die Oberfläche gegeben sind
if (klick[6].isSelected()) {
double v = Double.parseDouble(werte[6].getText());
werte[3].setText(Double.toString(Runden.runde(v
/ (x * y))));
werte[7].setText(Double.toString(Runden
.runde((x * y) * 2 + (x * v / (x * y)) * 2
+ (v / (x * y) * y) * 2)));
}
}
// wenn die Seiten A + C gegeben sind
if (klick[3].isSelected()) {
double z = Double.parseDouble(werte[3].getText());
// wenn die Seiten A + C und das Volumen gegeben sind
if (klick[7].isSelected()) {
double v = Double.parseDouble(werte[7].getText());
double b = v / (x * z);
double o = (x * z) * 2 + (x * v / (x * z)) * 2
+ (v / (x * z) * z) * 2;
if (o < 0) {
throw new Exception("Negative Zahl!");
}
if (b < 0) {
throw new Exception("Negative Zahl!");
}
werte[2].setText(Double.toString(Runden.runde(v
/ (x * z))));
werte[6].setText(Double.toString(Runden.runde(o)));
}
// wenn die Seiten A + C und die Oberfläche gegeben sind
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
double y = (f - x / 2 - z / 2) / 2;
double v = y * x * z;
if (y < 0) {
throw new Exception("Negative Zahl!");
}
if (v < 0) {
throw new Exception("Negative Zahl!");
}
werte[2].setText(Double.toString(Runden.runde(y)));
werte[7].setText(Double.toString(Runden.runde(v)));
}
}
// wenn die Seite A, die Oberfläche und das Volumen gegeben
// sind
if (klick[6].isSelected() && klick[7].isSelected()) {
JOptionPane
.showMessageDialog(
this,
"Es ist nicht möglich aus der Fläche, dem Volumen und einer Seite, die beiden anderen Seiten auszurechnen.");
neu.doClick();
}
}
// wenn die Seite B gegeben ist
if (klick[2].isSelected()) {
double y = Double.parseDouble(werte[2].getText());
// und die Seite C
if (klick[3].isSelected()) {
double z = Double.parseDouble(werte[3].getText());
// und das Volumen
if (klick[7].isSelected()) {
double v = Double.parseDouble(werte[7].getText());
double x = v / y / z;
double f = x * 2 + z * 2 + y * 2;
if (x < 0) {
throw new Exception("Negative Zahl!");
}
if (f < 0) {
throw new Exception("Negative Zahl!");
}
werte[1].setText(Double.toString(Runden.runde(x)));
werte[6].setText(Double.toString(Runden.runde(f)));
}
// und die Oberfläche
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
double x = (f - y / 2 - z / 2) / 2;
double v = x * z * y;
if (x < 0) {
throw new Exception("Negative Zahl!");
}
if (v < 0) {
throw new Exception("Negative Zahl!");
}
werte[1].setText(Double.toString(Runden.runde(x)));
werte[7].setText(Double.toString(Runden.runde(v)));
}
}
}
// wenn die Seite C, das Volumen und die Oberfläche angegeben
// sind
// es gibt keine weiteren Kombinationen mit C!
if (klick[3].isSelected() && klick[7].isSelected()
&& klick[6].isSelected()) {
JOptionPane
.showMessageDialog(
this,
"Es ist nicht möglich aus der Fläche, dem Volumen und einer Seite, die beiden anderen Seiten auszurechnen.");
neu.doClick();
}
// wenn die Oberfläche/das Volumen gegeben ist
// keine weiteren Kombinationsmöglichkeiten
}
// Berechnung für Würfel
if (klicks == 6 & markiert == 1) {
for (int i = 0; i <= 14; i++) {
klick[i].setEnabled(false);
}
// wenn die Seite gegeben ist
if (klick[1].isSelected()) {
double x = Double.parseDouble(werte[1].getText());
double v = x * x * x;
double f = x * x * 6;
if (v < 0) {
throw new Exception("Negative Zahl!");
}
if (f < 0) {
throw new Exception("Negative Zahl!");
}
werte[7].setText(Double.toString(Runden.runde(v)));
werte[6].setText(Double.toString(Runden.runde(f)));
}
// wenn das Volumen gegeben ist
if (klick[7].isSelected()) {
double v = Double.parseDouble(werte[7].getText());
double x = Math.pow(v, 1 / 3.);
double f = Math.pow(Math.pow(v, 1 / 3.), 2) * 6;
if (x < 0) {
throw new Exception("Negative Zahl!");
}
if (f < 0) {
throw new Exception("Negative Zahl!");
}
werte[1].setText(Double.toString(Runden.runde(x)));
werte[6].setText(Double.toString(Runden.runde(f)));
}
// wenn Oberfläche gegeben ist
if (klick[6].isSelected()) {
double f = Double.parseDouble(werte[6].getText());
double x = Math.sqrt(f) / 6;
double v = Math.pow(x, 3);
if (x < 0) {
throw new Exception("Negative Zahl!");
}
if (v < 0) {
throw new Exception("Negative Zahl!");
}
werte[1].setText(Double.toString(Runden.runde(x)));
werte[7].setText(Double.toString(Runden.runde(v)));
}
}
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(this,
"Bitte geben Sie nur Zahlen ein!");
neu.doClick();
} catch (Exception nz) {
JOptionPane.showMessageDialog(this,
"Sie haben eine negative Zahl produziert!");
neu.doClick();
}
}
Gegeben() {
menue = new JMenuBar();
menuDatei = new JMenu("Datei");
neurechnen = new JMenuItem("Neue Rechnung", KeyEvent.VK_N);
neurechnen.addActionListener(new KnopfAktionNeu());
konfig = new JMenuItem("Konfiguration", KeyEvent.VK_K);
konfig.addActionListener(new Menue());
close = new JMenuItem("Schließen", KeyEvent.VK_S);
close.addActionListener(new Menue());
exit = new JMenuItem("Beenden", KeyEvent.VK_B);
exit.addActionListener(new Menue());
menuDatei.add(neurechnen);
menuDatei.add(konfig);
menuDatei.add(close);
menuDatei.addSeparator();
menuDatei.add(exit);
menuBearbeiten = new JMenu("Bearbeiten");
ausgabe = new JMenu("Ausgabe in");
aus = new JRadioButtonMenuItem[4];
aus[0] = new JRadioButtonMenuItem("cm", true);
aus[1] = new JRadioButtonMenuItem("dm");
aus[2] = new JRadioButtonMenuItem("m");
aus[3] = new JRadioButtonMenuItem("km");
eingabe = new JMenu("Eingabe in");
ein = new JRadioButtonMenuItem[4];
ein[0] = new JRadioButtonMenuItem("cm", true);
ein[1] = new JRadioButtonMenuItem("dm");
ein[2] = new JRadioButtonMenuItem("m");
ein[3] = new JRadioButtonMenuItem("km");
gruppe1 = new ButtonGroup();
gruppe2 = new ButtonGroup();
for (int i = 0; i < 4; i++) {
ein[i].setEnabled(false);
gruppe1.add(aus[i]);
ausgabe.add(aus[i]);
aus[i].addItemListener(this);
aus[i].addActionListener(new Menue());
gruppe2.add(ein[i]);
eingabe.add(ein[i]);
ein[i].addItemListener(this);
ein[i].addActionListener(new Menue());
}
menuBearbeiten.add(eingabe);
menuBearbeiten.add(ausgabe);
menuHelp = new JMenu("?");
hilfe = new JMenuItem("Hilfe", KeyEvent.VK_H);
hilfe.addActionListener(new Menue());
kontakt = new JMenu("Kontakt...");
konSimon = new JMenuItem("...Simon");
konSimon.addActionListener(new Menue());
konFabian = new JMenuItem("...Fabian");
konFabian.addActionListener(new Menue());
version = new JMenuItem("Info", KeyEvent.VK_I);
version.addActionListener(new Menue());
kontakt.add(konSimon);
kontakt.add(konFabian);
menuHelp.add(hilfe);
menuHelp.add(kontakt);
menuHelp.add(version);
menue.add(menuDatei);
menue.add(menuBearbeiten);
menue.add(menuHelp);
this.setJMenuBar(menue);
klick = new JRadioButton[8];
klick[0] = new JRadioButton("Radius");
klick[1] = new JRadioButton("Seite A");
klick[2] = new JRadioButton("Seite B");
klick[3] = new JRadioButton("Seite C");
klick[4] = new JRadioButton("Durchmesser");
klick[5] = new JRadioButton("Umfang");
klick[6] = new JRadioButton("Fläche/Oberfläche");
klick[7] = new JRadioButton("Volumen");
for (int i = 0; i < 8; i++) {
klick[i].addItemListener(this);
}
werte = new JTextField[8];
grund = new JTextField[8];
for (int i = 0; i < 8; i++) {
werte[i] = new JTextField("");
werte[i].setEditable(false);
grund[i] = new JTextField("");
grund[i].setEditable(false);
}
neu = new JButton("Neue Rechnung");
neu.addActionListener(new KnopfAktionNeu());
}
class KnopfAktionNeu implements ActionListener {
public void actionPerformed(ActionEvent e) {
Gegeben geg = new Gegeben();
for (int i = 0; i < 8; i++) {
klick[i].setSelected(false);
klick[i].setEnabled(true);
geg.repaint();
werte[i].setText("");
grund[i].setText("");
}
markiert = 0;
}
}
class Menue extends JFrame implements ActionListener {
public void actionPerformed(ActionEvent e) {
int i, j = 8;
Gegeben geg = new Gegeben();
if (e.getActionCommand() == version.getText()) {
} else if (e.getActionCommand() == exit.getText()) {
System.exit(0);
} else if (e.getActionCommand() == hilfe.getText()) {
} else if (e.getActionCommand() == konSimon.getText()) {
} else if (e.getActionCommand() == konFabian.getText()) {
} else if (e.getActionCommand() == close.getText()) {
geg.setVisible(false);
} else if (aus[0].isSelected()) {
for (i = 0; i < 8; i++) {
grund[i].setText(werte[i].getText());
}
} else if (aus[1].isSelected()) {
for (i = 0; i < 6; i++) {
try {
double x = Double.parseDouble(werte[i].getText());
x /= 10;
grund[i].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
continue;
}
}
try {
double x = Double.parseDouble(werte[6].getText());
x /= 100;
grund[6].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
grund[6].setText("Hallo!");
}
try {
double x = Double.parseDouble(werte[7].getText());
x /= 1000;
grund[7].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
grund[7].setText("Hallo!");
}
} else if (aus[2].isSelected()) {
for (i = 0; i < 6; i++) {
try {
double x = Double.parseDouble(werte[i].getText());
x /= 100;
grund[i].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
continue;
}
}
try {
double x = Double.parseDouble(werte[6].getText());
x /= 10000;
grund[6].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
grund[6].setText("Hallo!");
}
try {
double x = Double.parseDouble(werte[7].getText());
x /= 1000000;
grund[7].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
grund[7].setText("Hallo!");
}
} else if (aus[3].isSelected()) {
for (i = 0; i < 6; i++) {
try {
double x = Double.parseDouble(werte[i].getText());
x /= 100000;
grund[i].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
continue;
}
}
try {
double x = Double.parseDouble(werte[6].getText());
x /= Math.pow(10,13);
grund[6].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
grund[6].setText("Hallo!");
}
try {
double x = Double.parseDouble(werte[7].getText());
x /= Math.pow(10, 13);
grund[7].setText(Double.toString(x));
} catch (NumberFormatException nfe) {
grund[7
].setText("Hallo!");
}
} else if (j == 4) {
System.out.println("Noch nicht implentiert!");
} else if (j == 5) {
System.out.println("Noch nicht implentiert!");
} else if (j == 6) {
System.out.println("Noch nicht implentiert!");
} else if (j == 7) {
System.out.println("Noch nicht implentiert!");
} else {
JOptionPane.showMessageDialog(this,
"<html><h3>Fehler</h3></html>\nKonnte nicht geladen werden", "Fehler", 2);
}
}
}
}