28 Şubat 2011, 10:27
#3 Çevrimiçi
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
Cevap: Hesap Makinesi
Kod: Kodu kopyalamak için üzerine çift tıklayın!
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 void main(String [] arg) {
new HesapMakinesi().setVisible(true );
}
public HesapMakinesi() {
super("Hesap makinesi" ); //Window (pencere) basligi
olusturGUI();
startFlashing();
}
public void 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 void windowClosing(WindowEvent we){
System.exit(0);
}
}
);
// Bu kod parçasi ise penceremizi X butonu ile kapatabilmemizi saglar.
}
public void 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 void 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 void 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 void startFlashing() {
Runnable flash = new Runnable() {
public void 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();
}
}