JavaFx-Hesap Makinesi

Merhaba arkadaşlar bugün ki yazımda JavaFx ile nasıl basit bir hesap makinesi yapılacağını anlatacağım. Arayüz alttaki resimde görüldüğü gibi hazırlanacak.
1
En üstte bir textField alttakiler görüldüğü üzere buton olarak hazırlanacak. Id’lerini istediğiniz gibi verebilirsiniz.Fakat butonların hepsine de aynı onAction tanımlayacağız.
C butonu sadece textField ‘da yazılı olanı temizleyecek, CE butonu ise hafızada ki tüm işlemleri temizleyecek.
Şimdi yavaş yavaş anlatmaya başlayalım, öncelikle sayı yazan butonlara basıldığında textField’e teker teker ekleme nasıl yapılır onu gösterelim.Ben her bir butona ‘number’ isminde onAction tanımladım.

@FXML
private void number(ActionEvent event) { 
Button btn = (Button)event.getSource();/*her tıkladığımızda sanal olarak yeni     buton oluşturup eventi çalıştıran kaynağı ona atıyoruz.*/
sayı=sayı+btn.getText(); //butonun üzerinde ki yazılı texti alıyoruz.
txt.setText(sayı); //txt isimli textField nesnemize yazıyoruz.
}

İşlemlere geçersek yavaş yavaş kodlar aşağıda ki gibi oluyor.Bunun için öncelikle üst tarafta say diye Integer bir nesne oluşturduk. Bunun görevi şu olucak.Butona basıldığında ilk kez basılıp basılmadığını kontrol edicez. Eğer ilk kez basılmışsa textField’dan yazılanı alıp bir nesneye ekleyecek, ilk kez basılmamışsa yazılanı alıp daha önceki aldığımızla toplayacak, çarpacak vs..

@FXML
private void topla(ActionEvent event) {

say++; //ilk kez basıldığı için arttırdık
if(say==1) //ilk kez basılmışsa
toplam=Integer.parseInt(txt.getText()); //txt'den aldığımızı çevirip aktarıyoruz
else{ //ilk değilse
toplam = toplam + Integer.parseInt(txt.getText());//önceki yazdığımızla topluyoruz
}
txt.setText("");//her bastığımızda textField'i temizlememiz gerekli
islem="toplam";//bu daha sonra eşittire basıldığında işimize yarayacak
sayı=""; /*gelen sayıyıda sıfırlıyoruz String bir ifade olduğu için bu şekilde    oluyor.*/
}

Diğer işlemlerde bununla aynı mantıkla ilerleyecek aşağıdan bakabilirsiniz.

@FXML
    private void cikar(ActionEvent event) {
        say++;
        if(say==1)
        fark=Integer.parseInt(txt.getText());
        else{
            fark = fark - Integer.parseInt(txt.getText());
        }
        txt.setText("");
        islem="fark";
        sayı="";
    }
@FXML
    private void carp(ActionEvent event) {
        say++;
        if(say==1)
        carpım=Integer.parseInt(txt.getText());
        else{
           carpım = carpım * Integer.parseInt(txt.getText());
        }
        txt.setText("");
        islem="carpım";
        sayı="";
    }
@FXML
    private void bol(ActionEvent event) {
        say++;
        if(say==1)
        bolum=Double.parseDouble(txt.getText());
        else{
           bolum = bolum / Double.parseDouble(txt.getText());
        }
        txt.setText("");
        islem="bolum";
        sayı="";
    }

Evet bütün işlemleri yaptıktan sonra sıra eşittir tuşuna bastıktan sonra ne yapılacağını belirlemekte. Yukarıda işlem olarak tanımladığımız nesne burada işimize yarayacak. İşlemin ne olduğuna bakıp ona göre altındaki işlemi yapacak.

@FXML
    private void esit(ActionEvent event) {
        
        if(islem.equals("toplam")){            
            toplam=toplam+Integer.parseInt(txt.getText());
            txt.setText(Integer.toString(toplam));
        }
        if(islem.equals("fark")){
            fark=fark-Integer.parseInt(txt.getText());
            txt.setText(Integer.toString(fark));
        }
        if(islem.equals("carpım")){            
            carpım=carpım*Integer.parseInt(txt.getText());
            txt.setText(Integer.toString(carpım));
        }
        if(islem.equals("bolum")){            
            bolum=bolum/Double.parseDouble(txt.getText());
            txt.setText(Double.toString(bolum));
        }
        
    }

Şimdi diğer butonların işlevlerini tanımlayalım. Sil görevi yani sadece textField’in içini boşaltan fonksiyon aşağıdaki gibi olacak.

@FXML
    private void sil(ActionEvent event) {
        txt.setText("");//txt siliniyor.
        sayı="";//hafızadaki sayı da sıfırlanıyor.
    }

Komple sıfırlama işlemi ise şöyle oluyor :

@FXML
    private void sifirla(ActionEvent event) {
        
        sayı="";
        islem="";
        toplam=0;
        carpım=1;
        fark=0;
        bolum=1;
        say=0;
        txt.setText("");
    }

Ok butonu yani sadece son yazılanı silme ise şöyle yapılıyor.

@FXML
    private void tekSil(ActionEvent event) {
        char []dizi = txt.getText().toCharArray(); //önce txt'den yazılanı alıyoruz
        char []dizi2 = new char[txt.getText().length()];//sonra son yazılanı kopyalayacağımız diziyi oluşturuyoruz.
        for (int i = 0; i < dizi.length-1; i++) { //asıl gelenin bir eksiği kadarlık for döngüsü oluşturduk
            dizi2[i]=dizi[i]; //her seferinde asıl diziden aynı indexleri kopyaladık
        }
        sayı = String.valueOf(dizi2); //daha sonra char dizisini string'e çevirdik
        txt.setText(sayı); // daha sonra yazdırdık
    }

Programı buradan indirebilirsiniz. Sağlıcakla.

Kod şiirdir. En güzeli sizin olsun.

JavaFx-Hesap Makinesi” üzerine bir yorum

Yorum bırakın