Kod:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//Programimiz için gerekli bazi paketleri import ettik.
public class HesapMakinesi extends Frame implements ActionListener {
Label display;
Button onOff;
Button[] tuslar;
Frame parent;
long oncekiSayi = 0;
char operatie = '=';
boolean yeniGirdi=true;
Font bigFont = new Font("Arial",Font.PLAIN,24); //Tuslar ve ekranin görünümü için bir 'font' tanimliyoruz
public static **** main(String[] arg) {
new HesapMakinesi().setVisible(true);
}
public HesapMakinesi() {
super("Hesap makinesi"); //Window (pencere) basligi
olusturGUI();
startFlashing();
}
public **** olusturGUI() {
parent=this;
display = new Label(" ",Label.RIGHT);
display.setBackground(Color.yellow);
display.setFont(bigFont);
onOff = new Button("On");
onOff.addActionListener(this);
onOff.setFont(bigFont);
Panel tusPaneli = new Panel(); //Bu paneli tuslarimisi yerlestirmek için kullanacagiz.
tusPaneli.setLayout(new GridLayout(4,4));
String[] isaretler = {"9","8","7", "/",
"6","5","4", "*",
"3","2","1", "-",
"0","C","=", "+" };
tuslar = new Button[16];
//Önce 'isaretler' adinda bize lazim olan isaretleri iceren bir String dizi olusturduk.
for (int b=0; b<16; b++) {
tuslar[b]=new Button(isaretler[b]);
tuslar[b].setFont(bigFont);
tuslar[b].addActionListener(this);
tusPaneli.add(tuslar[b]);
}
/*Tuslarimizi (on/of hariç) daha önce hazirladigimiz 'tusPaneli'ne for döngüsü yardimi ile tek tek yerlestiriyor
ve hepsini ActionListener'e bildiriyoruz. ActionListener arayüzü sayesinde tuslarimizin ne yapmasi herektigini
belirleyebilecegiz*/
this.add(display,BorderLayout.NORTH);
this.add(tusPaneli,BorderLayout.CENTER);
this.add(onOff,BorderLayout.SOUTH);
/*Ekranimizi (display), küçük tuslarimizi yapistirdigimiz tusPanel'imizi ve on/off tusumuzu container'e (this)
ekliyoruz */
this.setSize(250,250);
this.addWindowListener(new WindowAdapter() {
@Override
public **** windowClosing(WindowEvent we){
System.exit(0);
}
}
);
// Bu kod parçasi ise penceremizi X butonu ile kapatabilmemizi saglar.
}
public **** actionPerformed(ActionEvent evt) {
/* ActionListener arayüzünden 'implemente' ettigimiz ve tuslarimizin hareketlerini denetleyip
* verdigimiz kpmotlara göre ne yapilmasi gerektiginin anlatildigi sinifimiz. */
if ( onOff==evt.getSource() ) { //örnegin burada anlatilmak istenen onOff tusuna basildiginda...
doOnOff();
return;
}
if (onOff.getLabel().equals("On")) /*onOff butonunun Label'i "On" ise..
*Dikkat! Java'da String ifadenin karsilastirilmasi == ile degil
* equals(); yordami ile yapilir. */
return;
char input = evt.getActionCommand().charAt(0);
System.out.println("input:"+input);
if (input>='0' & input<='9' ) {
if (display.equals("0") || yeniGirdi)
display.setText(input+"");
else
display.setText(display.getText()+input);
return;
}
if (input=='C') {
oncekiSayi=0;
operatie='=';
yeniGirdi=true;
display.setText("0");
return;
}
String tekst="0"+display.getText().trim();
long sayi = Long.parseLong(tekst);
hesapla(input,sayi);
display.setText(oncekiSayi+"");
}
public **** hesapla(char input, long sayi) {
System.out.println("hesapla:"+input+"|"+sayi);
switch (operatie) {
case '=' : oncekiSayi= sayi; break;
case '+' : oncekiSayi+=sayi; break;
case '-' : oncekiSayi-=sayi; break;
case '*' : oncekiSayi*=sayi; break;
case '/' : oncekiSayi/=sayi; break;
}
operatie=input;
yeniGirdi=true;
}
public **** doOnOff() {
yeniGirdi=true;
if ( onOff.getLabel().equals("On") ) {
onOff.setLabel("Off");
display.setBackground(Color.yellow);
display.setText("0");
return;
}
onOff.setLabel("On");
display.setText(" ");
startFlashing();
}
public **** startFlashing() {
Runnable flash = new Runnable() {
public **** run() {
boolean yellow=true;
while(onOff.getLabel().equals("On")) {
if (yellow) display.setBackground(Color.green);
else display.setBackground(Color.yellow);
yellow=!yellow;
try { Thread.sleep(600); } catch (Exception ex) { }
} // end while
} // end run
}; // end Runnable
new Thread(flash).start();
}
}