Java for Kids – 12 July 20th, 2011
PENCERE OLAYLARI
Program çalışırken, kullanıcı, penceredeki bir butonu tıklayabilir ya da tarayıcı pencereyi yeniden şekillendirmeye çalışabilir bunun gibi olaylar gerçekleşebilir. Eminim ki; yaptığımız hesap makinemizdeki butonlara tıklamaktan sıkıldınız :) , makinemizdeki butonlar, boş butonlardır ve tıklandığında herhangi bir tepki vermemektedir. Ki insanlar ile bilgisayarların iletişime geçtiği ana durumdayız. Yani en heycanlı yeri!
Her bir pencere bileşeni, birkaç işlem yapabilir, ya da bizim deyimimizle(hani biz programcıyız ya) olayları dinleyebilir(listen). Programımız, pencere bileşenlerini Java sınıflarının dinleyicileri ile kaydeder. Dinleme işlerini(olayları) bileşenlerinize, yalnızca onlarla ilgili olan sınıflar ile dinletmelisiniz. Örneğin, kullanıcı fare imlecini, hesap makinesinin bir butonuna getirdiğinde, kullanıcının tam olarak nerde tıkladığı ve butonun üstünde ne kadar uzun süre basılı kaldığı önemli değildir. Bu sebepten, butona, MouseMotionListener sınıfını kaydetmemize gerek yoktur. Öte yandan bu dinleyici sınıfı (MouseMotionListener), bir çok çeşit çizim programı için çok kullanışlıdır.
Makinemizin butonları, buton tıklama olaylarıyla ilgili olan ActionListener sınıfıyla kaydedilmelir. Tüm bu dinleyiciler, özel Java sınıflarıdır ve arayüzler(interface) olarak adlandırılırlar.
Arayüzler / Interfaces
Sınıfların birçoğu, çeşitli eylemler yapan metotlar tanımlarlar, örneğin, butona basıldığında ne olacağı, fare hareketlerinde ne olacağı vs. gibi. Böyle eylemlerin birleşimine, sınıf davranışı (class behavior) adı verilir.
Arayüzler, kodlanmayan, kısmi eylemler yapabilen özel sınıfların ismidir, örneğin,
interface MouseMotionListener{
void MouseDragged (MouseEvent e);
void MouseMoved (MouseEvent e);
}
Görebildiğiniz gibi, MouseDragged() ve MouseModev() metotlarında herhangi bir kod yok, sadece interface içinde tanımlandılar ve MouseMotionListener olarak adlandırıldılar. Eğer sınıfınızın, fare hareket etmeye başladığında ya da sürüklendiğinde, tepki/cevap vermesi gerekiyorsa, bu arayüzü uygulamalıdır(implements). implements kelimesi/komutu; bu sınıfın metotlarının kesinlikle olacağını ve bu interface içinde tanımlayacağını belirtir, örneğin:
import java.awt.event.MouseMotionListener;
class DrawingPad implements MouseMotionListener {
//programımızın kodları
MouseDragged(MouseEvent e){
//Fare sürüklendiğinde programımızın vereceği tepki ya da yapacağı işlem
}
MouseMoved (MouseEvent e){
// Fare hareket ettirildiğinde programımızın vereceği tepki ya da yapacağı işlem
}
}
Burada interface’i tanımlamadık ancak eclipse bize uyarı verecek ve bunu bizim yerimize yapacak ayrıca kullandığımız metotları override edeceğimiz için bu konuda da yardımcı olacak, metotların başına @Override koyacak. Büyük bi olay değil ve fakat o olmadan olmuyor.
import java.awt.event.MouseMotionListener;
interface MouseMotionListener{
void MouseDragged (MouseEvent e);
void MouseMoved (MouseEvent e);
}
class DrawingPad implements MouseMotionListener {
//programımızın kodları
@Override
public void MouseDragged(MouseEvent e){
//Fare sürüklendiğinde programımızın vereceği tepki ya da yapacağı işlem
}
@Override
public void MouseMoved (MouseEvent e){
// Fare hareket ettirildiğinde programımızın vereceği tepki ya da yapacağı işlem
}
}
interface oluştururken, kod yazma sıkıntısı çekmediğimiz için şaşırmış olabilirisiniz. Bunun sebebi, bir interface oluşturulduğunda, birçok sınıf tarafından tekrar kullanılabilir. Eğer JVM ya da bir sınıf, cizimTahtam sınıfını gördüğünde, MouseMotionListener interface ‘i uygulamaya geçirir, ve bu sınıfın kesinlikle fareSurukle() ve fareHareket() metotlarını içerdiğini bilir. Kullanıcı fareyi hareket ettirdiği zaman, JVM fareHareket() metodunu çağıracak ve metoda yazdığımız kodu çalıştıracak. Şimdi her programcının fare hareketi metoduna farklı isimler koyduğunu düşünelim, (movedMouse(), fareHareketEtti() vs.) gibi, bu durumda JVM karmaşaya düşecek ve hangi metodu çağıracağını bilemeyecek. ( Bu yüzden, mouseMoved() ve mouseDragged() kullanacağız. )
Bir Java sınıfı, birden çok interface uygulayabilir, örneğin fare hareketlerine ve tıklamaya cevap vermeli:
Burda eclipse bize çok yardımcı oluyor, class’ın başındaki “olmadı bu” uyarısına tıklayıp “quick fix” seçeneğini tıklayalım. Burda karşımıza olması gereken çözümler getiriyor eclipse, bunlardan uygun olanları seçiyoruz ama tek tek. Java’daki deneyimimiz arttıkça bu quick fix şekerciği bizim çok seveceğimiz bir arkadaşımız olacak. Hata uyarsını tıklıyoruz ve quick fix penceresinden öncelikle “import MouseMotionListener” seçeneği tıklıyoruz ve eclipse hızlı bir şekilde programımıza gerekli sınıfı (MouseMotionListener) import ediyor. Hata uyarısı kaybolmadı farkettiysek! Çünkü daha devam edeceğiz, tekrar uyarıyı tıklayıp quick fix penceresinden “add unimplemented methods” seçeneğini tıklıyoruz ve eclipse teşekkür ediyoruz. Aynı 2 işlemi “ActionListener” sınıfı için de yapıyoruz.
Java ile gelen interface’leri öğrendikten sonra, kendi interfacelerimizi de oluşturabileceğiz, fakat bu konu ileri seviye olduğu için şu an buna değinmeyeceğiz. Kitapta öğrendik diyor ama tüm interface’leri öğrenmedik, sadece ne olduğunu, nasıl kullanacağımızı öğrendik. Tavsiyem google’dan yardırın! :)
Action Listener
Şimdi hesap makinemize geri dönüyoruz. Eğer, geçen bölümde verdiğim ödevleri tanımladıysanız (özellikle makinemize +,-,*,/ koymayı) görsel kısmı tamamladınız demektir (Ödevi yapmadıysanız bile ben yapılmış halini vereceğim). Şimdi Listener sınıfı oluşturacağız ve kullanıcı tıkladığında gerçekleşecek olayları butonlara tek tek atayacağız. Aslında biz Listener sınıfı oluşturmadan, aynı sınıf içinde de listener komutlarını kodlayabiliriz, fakat iyi programcılar (yani biz!) görsel ve işlem gibi farklı işleri, ayrı sınıflarda yaparlar.
Şimdi calculatorEngine (ya da istediğiniz bir isim) isminde bir sınıf oluşturuyoruz. Ve bu sınıf, kesinlikle java.awt.ActionListener interface i implements etmeli ve actionPerformed(ActionEvent) metodunu tanımlamalı. Kullanıcı butonlara tıkladığında, JVM bu interface metodunu çağırmalı ve uygulamalı.
Aşağıdaki gibi basit bir sınıf oluşturun:
Bu sınıfın sonraki sürümünde, actionPerformed() metodundan bir “mesaj kutusu” görünecek. JOptionPane ve showConfirmDialog() metodu ile isteğimiz mesajı görüntüleyebiliriz. Biraz ilerde bir örneğimiz var, ki hepimiz biliyoruz bunu Windows’un bazı durumlarda “doynk”, “dınks” ve türevleri seslerle çıkardığı kutucuk mesajlarından. Onları kullanacığız. Tabi ben linux kullandığım için daha karizmatik! görünecek o ayrı :)
showConfirmDialog() metodunun farklı çeşitleri vardır, biz burada 4 argümanlı olan birini kullanacağız. Aşağıdaki kodda, null bu mesaj kutusunun, ata penceresinin olmadığı anlamındadır, ikinci argüman ise, mesaj kutusunun başlığıdır, üçüncü mesaj, dördüncü buton seçmemize/tıklamamıza izin vermektedir. (PLAIN_MESSAGE sadece bir OK butonu olduğu anlamına gelmektedir.)
Sonraki kısımda, hesap makinemizi nasıl derleyip çalıştıracağımızı açıklayacağım ve Mesaj Kutusunu görüntüleyeceğiz.
ActionListener ile Bileşenleri Kaydetmek
Kim, ne zaman actionPerformed() metdounu çağıracak? Bu metodu JVM çağıracak tabi biz CalcutaorEngine sınıfına, bu butonları kaydedersek ya da linklersek (bağlama işlemi). Şimdi Calculator sınıfımızın yapıcı metodunun sonuna 2 satırlık şu kodu ekleyin;
CalculatorEngine calcEngine = new CalculatorEngine(); //sınıfımızdan bir örnek (instance) üretiyoruz button0.addActionListener(calcEngine);//button0 bileşenimize actionListener atıyoruz ve parametre olarak ürettiğimiz calcEngine sınıfını veriyoruz.
Çalıştırdığımızda, hesap makinemizin 0 butonuna basınca kutucuk mesajı çıkacak. Hatta makinemizin diğer tuşlarına da bu actionListener’i ekleyelim. Herhangi bir tuşa basıldığında da kutucuk mesajımız görüntülensin.
button1.addActionListener(calcEngine); . . . buttonEsittir.addActionListener(calcEngine);
Bir Olayın Kaynağı Nedir?
Şimdi listener/dinleyicimizi biraz daha zekileştireceğiz, her buton için farklı mesaj kutuları gösterecek. Bir eylem olayı olduğunda, JVM listener sınıfımızdaki, actionPerformed(ActionEvent) metodunu çağıracak ve ActionEvent deki argüman hakkında bilgi sağlayacak. Bu bilgiyi, uygun metodu çağırarak elde edebileceğiz.
Kalıplama (Casting)
Sıradaki örnekte, hangi butona basıldığını, getSource() metodununu çağıran kaynağı, ActionEvent sınıfının e değişkenin bu nesneyi bilgisayarın hafızasında nerde referans ettiğini bulacağız. Bu işlem, java dökümantasyonuna göre, olayın kaynağını bir nesne döndürüyor ki java’nın tüm pencere bileşenleri için bu işlem böyle yapılıyor.
Bu şekilde bunu tüm bileşenler için çalışan, genel (global-evrensel) metot olarak yapılabilir. Ama şunu kesin olarak biliyoruz ki, penceremiz için bir olaya yalnızca butonlarımız sebep olabilir! Bu yüzden geri dönen nesnemiz olan basılan buton için bir şekil oluşturacağız ( basılan butona bir rol atayacağız).
İşte kalıplamanın mantığı burda yatıyor. Java, olay kaynağını bir nesne örneği üzerinden işliyor. Kalıplama işlemi ise “(BileşenTipi)” eklenerek yapılıyor.
JButton clickedButton = (JButton) evt.getSource();
getSource() metodundan bir nesne geri döndüğü halde eşitliğin sol tarafında bir JButton tanımlıyoruz, JVM ye “ merak etme, JButton un bir örneğini aldığımı biliyorum “ demiş oluyoruz.
Yalnızca, JButtondan nesne kalıbını yaptıktan sonra, JButton sınıfına ait olacak olan getSource() metodunu çağırabileceğiz.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class CalculatorEngine implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton clickedButton = (JButton) e.getSource();//olayın kaynağını kalıplayarak alıyoruz
String clickedButtonLabel = clickedButton.getText();//olay kaynağının etiketini alıyoruz
JOptionPane.showConfirmDialog(null, "Basılan tuş: " + clickedButtonLabel, "Just a test!", JOptionPane.PLAIN_MESSAGE);
}
}
Pencere olayları bölümünde yapacağımız birkaç işlem daha var, ancak saat geç oldu ve yarın okul var :)
Herhangi bi ‘t’ anında görüşmek üzere, hepimize iyi çalışmalar!
Posted in Java, Java for Kids - Çeviri, programlama | 1 Comment »
Java for Kids – 11 July 9th, 2011
Selam sevgili 3-5 takipcim, sizi uzun süredir ihmal ettim, özellikle de Java for Kids konusunda. Bir süredir uzuuun bir dönem hiç ilgilenmek istemedim blogla. Özür dileyerek kaldığım yerden devam ediyorum. Herkese iyi çalışmalar.
Box Layout
java.swing.BoxLayout sınıfı, çoklu pencere bileşenlerini, yatay(x-eskeni) ve dikey(y-ekseni) olarak yerleştirmeye yarar. FlowLayout gibi değildir, pencerenin boyutları değiştiğinde, pencere kontrolleri bozulmaz. BoxLayout ile pencere kontrolleri değişik boyutlar alabilirler, bu GridLayout ta mümkün değildir.
Sıradaki iki satırlık kod, JPanel’de, box layout kullanarak dikey hizalama yapmaktadır.
Jpanel p1 = new JPanel(); setLayout(new BoxLayout(p1, BoxLayout.Y.AXIS));
Bu kodu kısaltmak için, BoxLayout referans nesnesi tanımlamadım, bu örneği oluşturmaktansa, setLayout() metoduna argüman olarak aktardım.
Grid Bag Layout
Bu kısımda java.awt.GridBagLayout manager kullanarak ve panelleri birleştirerek hesap makinesi penceresi oluşturmayı göstereceğim.
Hesap makinemiz, satırlar ve sütunlardan oluşmaktadır, fakat grid layout’ta tüm bileşenlerimiz aynı boyutta olmak zorunda. Bu bizim hesap makinemize uygun değil, çünkü makinemizde, üstte büyük bir yazı alanı var ve bu alan neredeyse 3 buton genişliğinde.
GridBagLayout, Grid sınıfının gelişmiş halidir, grid’de tüm hücreler aynı boyutta olmak zorundayken, girdbag’de farklı boyutlarda hücreler oluşturabiliriz. GridBagLayout sınıfı, GridBagConstraints isimli başka bir sınıfla beraber çalışmaktadır. Constrain(zorlamak), hücre özelliklerini (boyutlarını) belirlemek içindir ve GridBag kullandığımızda her hücre için bu özellikleri ayrı ayrı, ayarlamak zorundayız. Bir hücreye ait sınırlandırma(constraint), bileşen hücreye yerleştirilmeden önce ayarlanmalıdır. Örneğin, zorlamaların(constraint) özelliklerinden birisi izgaraGenisligi(gridwidth) olsun, aynı genişlikte başka hücreler oluşturmamıza izin verecektir.
GridLayout ile çalışırken, ilk önce, sınırlandırılan nesnenin bir örneğini oluşturmalı, sonra bunu özelliklerinin değerlerini belirlemeliyiz(bir kutu oluşturduğumuzu düşünün). Bunları yaptıktan sonra, bileşenimizi, oluşturduğumuz kutunun içindeki hücreye yerleştirebiliriz.
Üstteki resimde gridwidth ızgara genişliği, grid cell (0,0) ve (0,1) koordinatlar ızgara hücreleri, gridheight ızgara yüksekliğidir.
Aşağıdaki kodda, anlaşılması için birçok yorum satırı açıklaması bulunmaktadır.
// pencerenni bileşeni için GridBagLayout seçimi/ayarı yapılır GridBagLayout gb = new GridBagLayout(); this.setLayout(gb); // GridBagConstraints sınıfının bir örneği oluşturulur // bu satırları grid hücresine eklemek istediğiniz // her bileşen için tekrar yazmak gerekmektedir GridBagConstraints sinir = new GridBagConstraints(); // hesap makinesinin yazı alanı için sınırların ayarlanması // grid in x koordinatları sinir.x = 0; // grid in y koordinatları sinir.y = 0; // bu hücre de diğer hücreler gibi aynı yükseklikte olacak // onun için bunu birkez tanımlıyoruz sinir.gridheight = 1; (sinir.gridyukseklik.=1;) // bu hücre diğer hücrelerden 6 kat daha geniştir sinir.gridwidth = 6; (sinir.gridgenislik=6;) // hücredeki tüm boşlukları dolduruyoruz sinir.fill = sinir.BOTH; // bu bileşenin yatay boşluklarını orantılıyoruz sinir.weightx = 1.0; // bu bileşenin dikey boşluklarını orantılıyoruz sinir.weighty = 1.0; // bileşenin içerideki yeri sinir.anchor = sinir.CENTER; goruntuAlani = new JTextField(); // bu alan için sınırların ayarlanması gb.setConstraints(goruntuAlani,sinir); // pencereye yazı alanı ekliyoruz pencereicerigi.add(displayField);
Card Layout
Bir deste kâğıt düşünün, sırayla masa üstüne açılmış ve yalnızca en üstteki kartı görebiliyorsunuz. Ya da bir programda bulunan sekmeleri düşünün, bunu yapmak için java.awt.CardLayout manager yardımcı olacaktır.
Bir sekmeyi tıkladığımızda, ekranın içeriği değişecektir. Aslında, panellerin her biri için önceden yüklenmiş ve yerleştirilmiş bir ekran(görüntü) olmalıdır. Kullanıcı hangi kartı(sekme) tıklarsa, program o kartı görünür ve diğerlerini görünmez yapacak ve sadece o kartı getirmiş olacak.
Büyük ihtimalle bu layout’u kullanmayacaksınız, çünkü Swing kütüphanesinde bu işi yapacak daha iyi bir bileşen bulunmaktadır (JTabbedPane).
Layout Kullanmadan, Pencere Oluşturabilir Miyiz?
Tabi ki, oluşturacağınız pencerede, ekleyeceğiniz her bileşen için, bileşeni eklerken ekran koordinatlarını belirlemeniz gerekir. Bu durumda, sınıfınız açık bir şekilde layout kullanmayacağı durumunu bildirmelidir. Java da özel bir kelime/komut bulunmaktadır ve bu komut, “değeri yok” anlamına gelen “null” komutu/kelimesidir. Bu komutu, ileride pek çok defa kullanacağız, aşağıdaki örnek kod, herhangi bir layout kullanılmayacağı anlamına gelmektedir.
Eğer bunu yaparsanız, kodunuz, her pencere bileşeni için ayrı ayrı, sol üst köşenin koordinatları, genişlik, yükseklik değerlerini bildirmelidir. Sıradaki örnek, bir 40 piksel genişliği, 20 piksel yüksekliği olan ve 100 piksel sağda, 200 piksel aşağıda bir buton oluşturacaktır.
Pencere Bileşenleri
Bu kitapta, tüm Swing bileşenleri anlatmayacağım fakat bu bileşenlerle ilgili ayrıntılı bilgiyi ek okuma kısmında bulabileceksiniz, Swing Online Tutorial kısmında bulabilirsiniz ( fakat İngilizce). Bu ekte tüm Swing bileşenlerinin detaylı açıklamaları bulunmaktadır. Bizim hesap makinemiz sadece JButton, JLabel , JTextField kullanmakta, ve diğer kullanılabilecek olan bileşenlerin listesi:
Tabiki menüler(JMenu, JPopupMenu), popup pencereler, çerçeve içinde çerçeveler(JInternalFrame), standart pencereler(JFileChooser, JColorChooser, JOptionPane) oluşturabilirsiniz. Java, kullanılması mümkün olan tüm Swing bileşenlerini barındıran, üstün bir demo uygulama ile gelmektedir. Bu demo, Program Files\Java\jdk1.6.0_16\demo\jfc\SwingSet2 adresindedir. SwingSet2.html dosyasını açın ve inceleyin. Sıradaki resime benzer bir ortam ile karşılaşacaksınız:
Herhangi bir penceredeki araç kutusuna tıklayın ve bu Swing parçasının nasıl çalıştığını görün. Source Code sekmesinde, seçtiğiniz kısmın Java koduna erişebilirsiniz. Örneğin, soldan 4. Sekmeyi seçtiğinizde (JComboBox) aşağıdaki resme benzer bir pencereye erişeceksiniz.
Swing’de, pencerelerinizi güzelleştirmek için birçok farklı bileşen bulunmaktadır. (çn: ben baktım harbiden de süper şeyler var :) )
Bu bölümde, biz Swing bileşenlerini basitçe kodlayarak ve herhangi bir özel araç kullanmadan yazdık. Fakat, sürükle-bırak şeklinde bileşen ekleyebileceğimiz, özel araçlar bulunmaktadır. Bu araçlar, biz sürükle-bırak yaptıktan sonra eklemek istediğimiz Swing bileşeninin kodunu otomatik olarak ekleyecektir. Kolayca Swing ve SWT bileşenleri oluşturabileceğimiz, özel ve ücretsiz GUI (Graphic User Interface-grafiksel kullanıcı arayüzü-) araçlarından birisi, “jigloo “(bu ismi çok mu aramışlar nedir :) )’yu CloudGarden den bulabilirsiniz, bununla ilgili açıklama ek okuma bölümünde verilecektir, ki google den rahatça erişebilirsiniz.
Sonraki bölümde, bir pencerede gerçekleşen kullanıcı hareketlerine nasıl tepki-cevap verileceğini öğreneceksiniz.
Ek Okuma
Swing İçin Detaylı Kaynak:
java.sun/docs/boks/tutorial/uiswing/
Jigloo GUI Builder
cloudgarden.com/jigloo/index.html
JFormattedTextField Sınıfı Hakkında Detaylı Bilgi
java.sun da arama yapıp bulabilirsiniz.
Ödev-Pratik
- HesapMakinesi sınıfımızı biraz geliştirerek, +,-,*,/ butonlarını, p2 adında bir panele yerleştirin ve bu paneli içerik kısmının sağ kısmına ekleyin.
- JFormattedTextField sınıfı hakkında bilgi edindikten sonra, Hesap Makinemizde bu sınıfı kullanın.
İleri Seviye Ödev-Pratik
Oluşturduğumuz Hesap Makinesi ‘ni geliştirerek, nümerik butonları bir diziye aktarın.
Buttons[] SayiButonlari = new Buttons[9];
İpucu: bir döngü bu işlemi daha kolay şekilde yapmanıza yardımcı olacaktır. Ve 7. Bölümdeki Tic-Tac-Toe oyunumuzdaki koda bakabilirsiniz.
//iyi de ben daha 7. bölümü çevirmedim! Gördünüz mü dil bilmemek ne zor bir durum :)
Posted in Java, Java for Kids - Çeviri, programlama | No Comments »
Java for Kids – 10 August 7th, 2010
Kaldığımız yerden devam edeceğiz ancak biraz ortada bi yerde kalmışız :)
Border Layout
java.awt.BorderLayout sınıfı, pencereyi kuzey, güney, doğu, batı ve merkez olmak üzere parçalara böler. Kuzey üst, güney alt, doğu sağ, batı sol parçalardır.
Aşağıdaki kod, bir Border Layout ile nasıl textfield (yazı alanı) oluşturulacağı verilmektedir.
BorderLayout bl = new BorderLayout();
this.setLayoutManager(bl);
JTextField txtDisplay = new JTextField(20);
this.add("North", txtDisplay);
5 alanın hepsine pencere kontrolleri yerleştirmemize gerek yoktur. Biz sadece kuzey, güney ve merkez alanları kullanacağız, doğu ve batı alanlarını kullanmadığımız için, kullandığımız alanların genişliği artmıştır, kullansaydık haliyle, azalacaktı.
Biraz sonraki hesap makinesi versiyonumuzda, BorderLayout kullanacağız.
Layout Manager (Yapılandırma Yöneticileri)nin Birleştirilmesi
Windows işletim sistemindeki Hesap Makinesini bilirsiniz, sizce GridLayout ile bu şekil bir hesap makinesi yapılabilir mi?

Maalesef, çünkü yazı alanı ile tuşlar farklı boyutlarda, bu şekilde bir hesap makinesi ya da uygulama yazmak için layout’ları birleştirmeliyiz.
Yeni hesap makinemizde layout manager’leri birleştirmek için;
- Penceredeki, içerik paneline, bir BorderLayout atayalım.
- Penceremizin kuzeyine(North) yazıları görüntülemek için bir JTextField ekleyelim.
- GridLayout ile p1 isimli bir pano oluşturup, 20 buton ekleyelim ve p1 panosunu, p1 panosunu da merkeze(center) yerleştirelim.
- GridLayout ile p2 isimli bir pano oluşturup, 4 buton ekleyelim ve bunu da sola(west) yerleştirelim.
Şimdi hesap makinemizin basit bir versiyonuna göz atalım:
(Linuxa geçtiğim için Linuxtaki görüntüyü veriyorum, zaten windows için de aynı şekilde)

Yeni bir, HesapMakinesi sınıfı oluşturup, programı çalıştırın. Örnekteki program yorumlarını okuyup nasıl çalıştığını anlamaya çalışın.
package com.erdoganborklu.javaforkids.calculator; // uygulamamızın hangi pakette olduğu
import javax.swing.*; //grafikler için swing kütüphanesini ekliyoruz
//layout managerler
import java.awt.GridLayout;
import java.awt.BorderLayout;
public class calculator {
// Makinenin tüm bileşenlerinin tanımlanması
JPanel windowContent;
JTextField displayField;
JButton button0;
JButton button1;
JButton button2;
JButton button3;
JButton button4;
JButton button5;
JButton button6;
JButton button7;
JButton button8;
JButton button9;
JButton buttonDecimal;
JButton buttonEquals;
JButton buttonPlus;
JButton buttonMinus;
JButton buttonMultiply;
JButton buttonDivide;
JPanel p1;
JPanel p2;
// yapıcı tüm bileşenleri hafızada oluşturuyoruz BorderLayout ve GridLayout bileşimini penceremize ekliyoruz
public calculator() {
windowContent = new JPanel();
// bu pencere için layout Manager belirliyoruz
BorderLayout b1 = new BorderLayout();
windowContent.setLayout(b1);
// yazının görüneceği alanı oluşturup pencerenin kuzey kısmına yerleştirelim
displayField = new JTextField(30);
windowContent.add("North", displayField);
// JButton sınıfındaki etiketi parametre olarak belirleyen yapıcıyı kullanarak butonları oluşturalım
button0 = new JButton("0");
button1 = new JButton("1");
button2 = new JButton("2");
button3 = new JButton("3");
button4 = new JButton("4");
button5 = new JButton("5");
button6 = new JButton("6");
button7 = new JButton("7");
button8 = new JButton("8");
button9 = new JButton("9");
buttonDecimal = new JButton(",");
buttonEquals = new JButton("=");
buttonPlus = new JButton("+");
buttonMinus = new JButton("-");
buttonMultiply = new JButton("*");
buttonDivide = new JButton("/");
// 10 nümerik ve 1 , 1 = olan 12 buton ve GridLayout içeren bir pano oluşturalım
p1 = new JPanel();
GridLayout g1 = new GridLayout(4, 3);
p1.setLayout(g1);
p2 = new JPanel();
GridLayout g2 = new GridLayout(4,1);
p2.setLayout(g2);
// pencere kontrollerini panoya ekleyelim
p1.add(button1);
p1.add(button2);
p1.add(button3);
p1.add(button4);
p1.add(button5);
p1.add(button6);
p1.add(button7);
p1.add(button8);
p1.add(button9);
p1.add(button0);
p1.add(buttonDecimal);
p1.add(buttonEquals);
//p2 panosunu da dolduralım
p2.add(buttonPlus);
p2.add(buttonMinus);
p2.add(buttonMultiply);
p2.add(buttonDivide);
// p1 panosunu merkeze yerleştirelim
windowContent.add("Center", p1);
//p2 yi sağa
windowContent.add("East",p2);
// çerçeveyi oluşturup içerik olarak ayarlayalım
//görünecek olan çerçeveyi oluşturup adını parametre olarak giriyoruz
JFrame frame = new JFrame("Hesap Makinesi");
frame.setContentPane(windowContent);
// pencerenin boyutunu tüm kontrollere yetecek şekilde ayarlayalım
frame.pack();
// son olarak pencereyi görünür yapalım
frame.setVisible(true);
}
// ve main methodu içinde, uygulamamızın bir örneğini (instance) oluşturalım.
public static void main(String[] args) {
calculator calcu = new calculator();
}
}
Hesap makinesinin görsel arayüzü hazır. Ancak daha gösterilecek olacak birkaç tane daha LayoutManager var, ondan sonra hesap makinemizi çalıştırmaya geçeceğiz.
Herkese iyi çalışmalar, eğlenceler :)
Posted in Java, Java for Kids - Çeviri, programlama | No Comments »


