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.
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.
çok güzel bir site olmuş tebrikler
BeğenBeğen