/* ============================================================
* PROJEKT: SWING- TASCHENRECHNER IN JAVA PROGRAMMIERT
*
* PROJEKTDAUER: 03.12.03 - 11.12.03
*
* ERSTELLER: LUTZ ALTHANS MEDIENINFORMATIKERGRUPPE 21430202
* ============================================================
*/

//package Projekt_1;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class Pro_5 {

public static void main(String[] args){


new MyJFrame1();


}
} //class


class MyJFrame1 extends JFrame {


//--------------------------------------------------------------------------
/////////////// DEKLARATION /////////////////////////////////////////
//--------------------------------------------------------------------------
JScrollPane sp;
Image image; //Hintergrundimage
String Eingabe = ""; //Textareavariable
String operator = ""; //Operator
double eingabe =0.0; //Variable, die den Rechenweg speichert
double erg = 0.0;
boolean minus =false; //Operatorenerkennung am Anfang einer Rechenoperation
boolean plus =false; //Operatorenerkennung am Anfang einer Rechenoperation
boolean mal =false; //Operatorenerkennung am Anfang einer Rechenoperation
boolean teil =false; //Operatorenerkennung am Anfang einer Rechenoperation
boolean proz =false; //Operatorenerkennung am Anfang einer Rechenoperation

String speicher =""; //Endspeicher für Schreiben in Datei
String bildpfad =("D:/Gast/Java_becker/Java_Uebungen/Projekt_1/");
// Alternativpfad
//String bildpfad =("C:/Dokumente und Einstellungen/gast/Desktop");

JComboBox cop;
JComboBox cop1,cop2;
String[] coptext1 = {"metal_calc","gruen","rot","gelb","matrix"};
String[] coptext2 = {"toolz","Hilfe","speichern","quit"};
HGPanel hgp;
JTextArea tf1; //Anzeige des Rechners
JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bmal,bteil,bplus,bminus,berg,breset,bproz,bkomma;
String a;//Protokoll für datei
MyJFrameHilfe fhilfe; //externes Hilfeframe
Container cp = getContentPane();


public MyJFrame1(){
super("Rechner 1");

setBounds(500,110,500,800);
setDefaultCloseOperation(EXIT_ON_CLOSE);

//----------------------------------------------------------------------
////////////// INITIALISIERUNG ////////////////////////////////////
//----------------------------------------------------------------------

b1 = new JButton(new ImageIcon(Pro_5.class.getResource("b1.jpg")));
b2 = new JButton(new ImageIcon(Pro_5.class.getResource("b2.jpg")));
b3 = new JButton(new ImageIcon(Pro_5.class.getResource("b3.jpg")));
b4 = new JButton(new ImageIcon(Pro_5.class.getResource("b4.jpg")));
b5 = new JButton(new ImageIcon(Pro_5.class.getResource("b5.jpg")));
b6 = new JButton(new ImageIcon(Pro_5.class.getResource("b6.jpg")));
b7 = new JButton(new ImageIcon(Pro_5.class.getResource("b7.jpg")));
b8 = new JButton(new ImageIcon(Pro_5.class.getResource("b8.jpg")));
b9 = new JButton(new ImageIcon(Pro_5.class.getResource("b9.jpg")));
b0 = new JButton(new ImageIcon(Pro_5.class.getResource("b0.jpg")));

bplus = new JButton(new ImageIcon(Pro_5.class.getResource("bplus.jpg")));
bminus = new JButton(new ImageIcon(Pro_5.class.getResource("bminus.jpg")));
bmal = new JButton(new ImageIcon(Pro_5.class.getResource("bmal.jpg")));
bteil = new JButton(new ImageIcon(Pro_5.class.getResource("bteil.jpg")));
bproz = new JButton(new ImageIcon(Pro_5.class.getResource("bproz.jpg")));
breset = new JButton(new ImageIcon(Pro_5.class.getResource("breset.jpg")));
berg = new JButton(new ImageIcon(Pro_5.class.getResource("berg.jpg")));
//bkomma = new JButton(new ImageIcon(Pro_5.class.getResource("bkomma.jpg")));

repaint();
cop1 = new JComboBox(coptext1);
cop2 = new JComboBox(coptext2);

//----------------------------------------------------------------------
///////////// EREIGNISBEHANDLUNG DER COMBOBOXEN /////////////////////
//----------------------------------------------------------------------
cop1.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){

JComboBox selectedChoice = (JComboBox)e.getSource();
hgp.setImage(selectedChoice.getSelectedIndex());
validate();
repaint();
}
});

cop2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JComboBox selectedChoice = (JComboBox)e.getSource();
if (selectedChoice.getSelectedItem().equals("toolz")){
System.out.println("toolz");

}
if (selectedChoice.getSelectedIndex()==1){
System.out.println("hilfe "+fhilfe);
if(fhilfe==null || fhilfe.isVisible()==false)
fhilfe = new MyJFrameHilfe();
cop2.setSelectedIndex(0);
}
if (selectedChoice.getSelectedItem().equals("speichern")){
System.out.println("speichern");
//InDateiSchreiben("D:/Gast/Java_becker/Java_Uebungen/IO/datei1");
// Alternativpfad
InDateiSchreiben("D:/Gast/Java_becker/Java_Uebungen/Projekt_1/datei1");
}
if (selectedChoice.getSelectedItem().equals("quit")){
System.out.println("quit");
System.exit(0);
}
}

});

b1.setBorder(BorderFactory.createRaisedBevelBorder());
b2.setBorder(BorderFactory.createRaisedBevelBorder());
b3.setBorder(BorderFactory.createRaisedBevelBorder());
b4.setBorder(BorderFactory.createRaisedBevelBorder());
b5.setBorder(BorderFactory.createRaisedBevelBorder());
b6.setBorder(BorderFactory.createRaisedBevelBorder());
b7.setBorder(BorderFactory.createRaisedBevelBorder());
b8.setBorder(BorderFactory.createRaisedBevelBorder());
b9.setBorder(BorderFactory.createRaisedBevelBorder());
b0.setBorder(BorderFactory.createRaisedBevelBorder());
bplus.setBorder(BorderFactory.createRaisedBevelBorder());
bminus.setBorder(BorderFactory.createRaisedBevelBorder());
bmal.setBorder(BorderFactory.createRaisedBevelBorder());
bteil.setBorder(BorderFactory.createRaisedBevelBorder());
bproz.setBorder(BorderFactory.createRaisedBevelBorder());
breset.setBorder(BorderFactory.createRaisedBevelBorder());
berg.setBorder(BorderFactory.createRaisedBevelBorder());
//bkomma.setBorder(BorderFactory.createRaisedBevelBorder());

JPanel comboPanel = new JPanel();
comboPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
comboPanel.setBackground(new Color(255,255,255,0));
comboPanel.add(cop1);
comboPanel.add(cop2);
tf1 = new JTextArea(2,10);
tf1.setEditable(false);
tf1.setBorder(BorderFactory.createRaisedBevelBorder());

sp = new JScrollPane(tf1);
hgp = new HGPanel(0);
hgp.add(comboPanel,BorderLayout.NORTH);
hgp.add(new MyJLabel1(" "),BorderLayout.WEST);
hgp.add(new MyJLabel1(" "),BorderLayout.EAST);
hgp.add(new midPanel(),BorderLayout.CENTER);
cp.add(hgp);

// pack();

setVisible(true);

}//INNER CLASS

//--------------------------------------------------------------------------
/////////////// /// WRITER FÜR EINE EXTERNE .TXT- DATEI //////////////////
//--------------------------------------------------------------------------

public void InDateiSchreiben(String verzeichnis) {

try {
System.out.println("durch");
BufferedWriter fr = new BufferedWriter(new FileWriter("D:/Gast/Java_becker/Java_Uebungen/Projekt_1/datei1.txt"));
//Alternativpfad: FileWriter fr = new FileWriter("");
fr.write(speicher);
fr.newLine();
fr.close();
System.out.println("#");
} catch (IOException e) {
System.out.println("Konnte Datei nicht erstellen");
}
}


//--------------------------------------------------------------------------
//////////////////// CLASS MIDPANEL 3. LAYER ////////////////////
//--------------------------------------------------------------------------

class midPanel extends JPanel{

public midPanel(){
setLayout(new BorderLayout());
setBackground(new Color(0,0,0,0));
setBorder(BorderFactory.createCompoundBorder());
add(sp,BorderLayout.NORTH);
add(new GridtastPanel(),BorderLayout.CENTER);
}
}//INNER CLASS

//--------------------------------------------------------------------------
/////////////////// CLASS GRIDTASTPANEL IN MIDPANEL 4. LAYER /////////
//--------------------------------------------------------------------------

class GridtastPanel extends JPanel implements ActionListener{
public GridtastPanel(){
setLayout(new GridLayout(10,3,10,30));
setBackground(new Color(0,255,0,0));
tf1.setFont(new Font("serif",Font.BOLD,30));
tf1.setText("");
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);

add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
add(b0);

add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
berg.addActionListener(this);
//bkomma.addActionListener(this);
breset.addActionListener(this);
bproz.addActionListener(this);
bplus.addActionListener(this);
bminus.addActionListener(this);
bmal.addActionListener(this);
bteil.addActionListener(this);


/*ToolTipTexte wurden auskommentiert, weil sie - wahrschenlich
durch die LayeredPane und die BackgroundColor- Einstellungen
der folgenden Layer Schatten werfen
*/
// berg.setToolTipText("Ergebnis ausgeben");
add(berg);
add(new JLabel(""));
add(new JLabel(""));
// bkomma.setToolTipText("Komma setzen");
//add(bkomma);
// breset.setToolTipText("Löschen?");
add(breset);
// bproz.setToolTipText("Prozentrechnung");
add(bproz);
// bplus.setToolTipText("Addition");
add(bplus);
// bminus.setToolTipText("Subtraktion");
add(bminus);
// bmal.setToolTipText("Multiplikation");
add(bmal);
// bteil.setToolTipText("Division");
add(bteil);

add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
add(new JLabel(""));
}


//----------------------------------------------------------------------
///////////////// EREIGNISBEHANDLUNG DER BUTTONS /////////////////////
//----------------------------------------------------------------------

public void actionPerformed(ActionEvent e) {


if(e.getSource()== b1){
tf1.setText("1");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b2){
System.out.println("Button 2");
tf1.setText("2");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b3){
tf1.setText("3");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b4){
tf1.setText("4");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b5){
tf1.setText("5");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b6){
tf1.setText("6");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b7){
tf1.setText("7");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b8){
tf1.setText("8");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}

if(e.getSource()== b9){
tf1.setText("9");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}
if(e.getSource()== b0){
tf1.setText("0");
Eingabe = Eingabe + tf1.getText();
tf1.setText(Eingabe);

}


//------------------------------------------------------------------
//////// Kommabehandlung (nicht fertig) //////////////////////////
//------------------------------------------------------------------

//if(e.getSource()== bkomma){
// tf1.setText("."+"\n");
// if('0' <= bkomma.charAt(0) && bkomma.charAt(0) <= '9' || bkomma.equals(".")){
// System.out.println("Komma?");
// tf1.setText("Zahl eingeben!"+"\n"+"In dieser Version nicht möglich");
// tf1.setText("\n");
//}

if(e.getSource()== breset){
System.out.println("Button C");
tf1.setText("-!! GELÖSCHT !!-"+"\n ");
erg = 0.0;
Eingabe = "";
a = "";
speicher = speicher + a +"\n";

}

if(e.getSource()== bproz){
a = tf1.getText();
speicher = speicher + a + "%";
eingabe = Double.parseDouble(tf1.getText());
berechneproz(eingabe);
System.out.println("Button %");

}

if(e.getSource()== bplus){
a = tf1.getText();
speicher = speicher + a + "+";
eingabe = Double.parseDouble(tf1.getText());
berechneplus(eingabe);
System.out.println(operator);
System.out.println(erg);

}

if(e.getSource()== bminus){
a = tf1.getText();
speicher = speicher + a + "-";
eingabe =Double.parseDouble(tf1.getText());
berechneminus(eingabe);
System.out.println(operator);
System.out.println(erg);

}

if(e.getSource()== bmal){
a = tf1.getText();
speicher = speicher + a + "x";
eingabe = Double.parseDouble(tf1.getText());
berechnemal(eingabe);
System.out.println(operator);
System.out.println(erg);

}

if(e.getSource()== bteil){
a = tf1.getText();
speicher = speicher + a +"/";
eingabe = Double.parseDouble(tf1.getText());
berechneteil(eingabe);
System.out.println(operator);
System.out.println(erg);

}

if(e.getSource()== berg){
a = tf1.getText();
speicher = speicher + a +"=";
eingabe = Double.parseDouble(tf1.getText());
berechnegleich(eingabe);
tf1.setText(""+"="+erg+"\n");
a = tf1.getText();
speicher = speicher + a + "\n";
System.out.println(operator);
System.out.println(erg);

}

}

}//INNER CLASS

//--------------------------------------------------------------------------
///////////// RECHENMETHODEN, DURCH ACTION PERFORMED AUFGERUFEN ///////////
//--------------------------------------------------------------------------

public double berechneplus(double wert){
System.out.println("berechnung +");
if(plus == false)
{
erg = wert;//Abfrage durch Zähler nach vorhergehender Operation
plus = true;
}
else
{
erg = erg + wert;
}

System.out.println(erg+" ="+erg+" +"+ wert);
tf1.setText("\n");
Eingabe = " ";
operator = "+";
return erg;
}

public double berechneminus(double wert){
System.out.println("berechnung -");
if(minus ==false)
{
erg = wert;
minus = true;
}
else
{
erg = erg - wert;
}
System.out.println(erg+" ="+erg+" -"+ wert);
Eingabe = " ";
operator = "-";
return erg;
}

public double berechnemal(double wert){
System.out.println("berechnung x");
if(mal == false)
{
erg = wert;
mal = true;
}
else
{
erg = erg * wert;
}
System.out.println(erg+" ="+erg+" *"+ wert);

Eingabe = " ";
operator = "*";
return erg;
}

public double berechneteil(double wert){
System.out.println("berechnung /");
if(teil == false)
{
erg = wert;
teil = true;
}
else
{
erg = erg / wert;
}
System.out.println(erg+" ="+erg+" /"+ wert);

Eingabe = " ";
operator = "/";
return erg;
}

public double berechneproz(double wert){
System.out.println("berechnung %");

System.out.println("proz");
erg = wert / 100.0 ;

System.out.println(erg);

Eingabe = " ";
operator = "%";
return erg;
}
public double berechnegleich(double wert){
System.out.println("berechnunggleich");
if(operator.equals("+")){
System.out.println("gleich +");
erg =erg + wert;
System.out.println(erg+" ="+erg+" +"+ wert);
}
if(operator.equals("-")){
System.out.println("gleich -");
if(erg!=0.0)
erg =erg - wert;
System.out.println(erg+" ="+erg+" -"+ wert);
}
if(operator.equals("*")){
System.out.println("gleich x");
erg =erg * wert;
System.out.println(erg+" ="+erg+" *"+ wert);
}
if(operator.equals("/")){
System.out.println("gleich /");
erg =erg / wert;
System.out.println(erg+" ="+erg+" /"+ wert);
}
if(operator.equals("%")){
System.out.println("gleich %");
erg =erg * eingabe;
System.out.println(erg+" ="+erg+" *"+ wert);
}

minus = false;
plus = false;
mal =false;
teil = false;
proz = false;
return eingabe;

}


//--------------------------------------------------------------------------
/////////////// CLASS HGPANEL UNTERSTER LAYER ////////////////////////
//--------------------------------------------------------------------------
class HGPanel extends JLayeredPane{
Image image;
Image[] img =new Image[5];
int index;
public HGPanel(int index){
this.index=index;

img[0] = Toolkit.getDefaultToolkit().getImage(bildpfad+"metal_calc.jpg");
img[1] = Toolkit.getDefaultToolkit().getImage(bildpfad+"gruen.jpg");
img[2] = Toolkit.getDefaultToolkit().getImage(bildpfad+"rot.jpg");
img[3] = Toolkit.getDefaultToolkit().getImage(bildpfad+"gelb.jpg");
img[4] = Toolkit.getDefaultToolkit().getImage(bildpfad+"matrix.jpg");
MediaTracker mtr = new MediaTracker(this);
mtr.addImage(img [0],(0));
mtr.addImage(img [1],(0));
mtr.addImage(img [2],(0));
mtr.addImage(img [3],(0));
mtr.addImage(img [4],(0));
try{
mtr.waitForAll();
}catch(Exception e){}
setLayout(new BorderLayout());
}
public void setImage(int index){
this.index = index;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
System.out.println("#"+image+"#");
System.out.println("#");
g.drawImage(img[index],0,0,getWidth(),getHeight(),this);
}
}//INNER CLASS


///////////////////////////////////////////////////////////////////////
///////////// FAKE //////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

class MyJLabel1 extends JLabel{
public MyJLabel1(String s){
super(s);
}

public void setBounds(int x, int y, int w, int h) {
System.out.println("breite "+w);
super.setBounds(x,y,50,50);
}
}//INNER CLASS


}//class MyJFrame1


//------------------------------------------------------------------------------
///////////////// HIFEFENSTER EXTERNES JFRAME - DURCH COP2 AUFGERUFEN ////////
//------------------------------------------------------------------------------

class MyJFrameHilfe extends JFrame { //extends JFrame= erbt von JFrame

Container cp = getContentPane();
JTextField tf1;
JTextArea ta1;


public MyJFrameHilfe() {
super("Hilfe");
setBounds(100,100,300,300);


tf1 = new JTextField(" Version 1.0 : Luzifer and friends");
tf1.setEditable(false);
ta1 = new JTextArea(10,10);
ta1.setOpaque(false);
ta1.setBackground(new Color(0,255,0,50));
ta1.setLineWrap(true);
ta1.setWrapStyleWord(true);
ta1.setFont(new Font("Arial",Font.BOLD,16));
ta1.setText(""+"\n"+" BENUTZERHANDBUCH"+"\n"+""+"\n"+"Das Programm besteht aus einem äußeren Rahmen, der ca. 500 x 800 Pixel groß ist."+"\n"+"Das Layout des Rechners lässt sich über eine AuswahlBox, die oben links angebracht ist, im Design ändern."+"\n"+"Daneben ist eine weitere Box angelegt, über deren Auswahlmenü die Hilfe zur Bedienung des Rechners angezeigt wird."+"\n"+"Eine weitere Option dieser Box ist das Ausgeben der Daten in eine externe.txt- Datei zur weiteren Verwendung, die im Programmordner liegt."+"\n"+"Im äußeren Rahmen ist ein innerer Rahmen angelegt,der den eigentlichen Taschenrechner enthält."+"\n"+"In diesem Rahmen ist ganz oben ein Textfeld angesiedelt, in dem die jeweils eingegebenen Zahlen und das Rechenergebnis angezeigt wird."+"\n"+"Im oberen Drittel befindet sich das Interaktionsfeld, bestehend aus dem Zahlenblock(0 - 9) und im unteren Drittel dem Operatorenblock (Grundrechenarten, Prozentrechnung sowie Löschfunktion)."+"\n"+""+"\n"+" DIESER RECHNER IST BUGGY!"+"\n"+""+"\n"+"Es können bei dieser Version nur ganze natürliche Zahlen eingegeben und verarbeitet werden!!!"+"\n"+"Die Ausgabe der Ergebnisse wiederum kann negative Zahlen und Nachkommastellen enthalten!"+"\n"+"Sollen mehrere Rechenoperationen nacheinander erfolgen, muß für ein korrektes Ergebnis nach jeder erfolgten Rechenoperation die Ergebnistaste gedrückt werden!"+"\n"+"Beispiel 3 x 3 = 9"+"\n"+"Es dürfen nicht zwei Operatortasten ohne eine zwischenzeitliche Eingabe von Zahlenwerten betätigt werden!"+"\n"+"Daß der Anwender weiß, wie ein Taschenrechner im Grunde anzuwenden ist, setze ich voraus..."+"\n"+" DANKE UND VIEL SPASS!!!");
ta1.setEditable(false);

JPanel NorthPanel =new JPanel();
NorthPanel.setBackground(Color.gray);
NorthPanel.setBorder(BorderFactory.createTitledBorder("Version"));

NorthPanel.add(tf1);

JPanel westPanel= new JPanel();
westPanel.setLayout(new GridLayout(1,0));
westPanel.setBorder(BorderFactory.createEtchedBorder());
westPanel.setBackground(Color.gray);
westPanel.add(new JLabel("Hilfe: "));
JScrollPane sp = new JScrollPane(ta1);

cp.setLayout(new BorderLayout());
cp.add(NorthPanel,BorderLayout.NORTH);
cp.add(westPanel,BorderLayout.WEST);
cp.add(sp,BorderLayout.CENTER);

//pack();

setVisible(true);

}
}// class MyJFrameHilfe