Java Bilgileri | Bölüm 8!

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
İşte geri döndü! Aslında dönmedi. Aklıma geldikçe bildiğim bazı konuları anlatmaya çalışıyorum. Diğer bölümlere bakmak isterseniz "Java Bölümü"nden bulabilirsiniz. Bu bölümde penceremize klavye özellikleri eklemeyi öğreticem. Daha doğrusu ESC tuşuna bastığımızda programı kapatmak, A tuşuna bastığımızda ekranı büyütmek gibi şeyler. Bunu butonlar için yapmayın. Butonlara klavye tuşu eklemek için daha kolay bir yol var. Hatta ilk başta onu göstericem.

Önce kodumuza bakıyoruz. (8 bölümdür olduğu gibi...)
PHP:
public JButton butonYap(final JButton btn, int tuş) {
    InputMap im = btn.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    ActionMap actionm = btn.getActionMap();
    im.put(KeyStroke.getKeyStroke(tuş, 0), "isim");
    actionm.put("isim", new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            btn.doClick();
        }
    });

    return btn;
}
Burada yaptıklarımızı anlatayım. Öncelikle verilen butonun girdi haritasını alıyoruz. Ama bir şartımız var. WHEN_IN_FOCUSED_WINDOW. Yani pencereye odaklanıldığında. Sonra etkileşim haritasını alıyoruz. Sonra da girdi haritamıza bir girdi ekliyoruz. Bir KeyStroke ve verilecek ismi lazım. Oradaki 0'a takılmayın. Modifier o. Her neyse. Sonra bu girdi haritasında tuşumuza atadığımız isim ile etkileşim haritasına bir etkileşim ekliyoruz. Sonra da btn.doClick() yapıyoruz. Yani tuşa basılsın diyoruz. Sonra da modifiye ettiğimiz butonu geri döndürüyoruz.

Şimdi burada bir şeye takılmış olabilirsiniz. Neden "final JButton" diye. btn değişkenini bir Inner-Scope'ta tanımladığımız için değişkenin final olması gerekli. Yani methodun içinde bir class oluşturduğumuz için diyebiliriz. İşte bu kadar denebilir.

Asıl amacımıza gelelim. Klavye eklemek. Zor bir şey değil. Hatta fare özellikleri bile ekleyebilirsiniz. Şimdilik biz Klavye ile kalalım.
PHP:
// Klavye Sınıfımız
public class Klavye implements KeyListener {

    JFrame pencere;

    public Klavye(JFrame pencere) {
        this.pencere = pencere;
    }

    @Override
    public void keyPressed(KeyEvent e) { // Tuşa basıldığında
        int tuş_kodu = e.getKeyCode();
        if (tuş_kodu == KeyEvent.VK_ESCAPE) {
            System.exit(0);
        }
        if (tuş_kodu == KeyEvent.VK_A) {
            pencere.setSize(500, 500);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) { // Tuş çekildiğinde
      
    }

    @Override
    public void keyTyped(KeyEvent e) { // Tuş yazıldığında (Kullanmayın)
      
    }
}
PHP:
// main metodu
public static void main(String args[]) {
    pencere.addKeyListener(new Klavye(pencere)); // Penceremize klavyemizi ekliyoruz
}
Kısaca "Eğer A tuşuna basılırsa pencerenin büyüklüğünü 500x500 yap. Eğer ESCAPE tuşuna basılırsa programdan çık." dedik. Sonra da penceremize etki edebilmesi için penceremize ekledik. İşte böyle yapabilirsiniz.

Eğer anlamadığınız bir yer varsa sorabilirsiniz. Eğer bir hatamı görürseniz de lütfen belirtin. İyi günler dilerim...
 


Cranky

Hayattaki en hakiki mürşit ilimdir.
Site Yöneticisi
Site Danışmanı
Mesajlar
941
En iyi cevaplar
21
Beğeniler
1,282
Puanları
3,520
Güzele benziyor :D
 

MegaCrafter

Obsidyen Madencisi
Mesajlar
1,419
En iyi cevaplar
0
Beğeniler
1,542
Puanları
3,070
Yalnız actionMap'i sansürlemiş :D Onu düzelteyim hemen.
 

Dantero

Elmas Madencisi
Mesajlar
881
En iyi cevaplar
0
Beğeniler
514
Puanları
1,310
Ruh hali
Yeni gördüm şimdi yorum yapıyorum. Gerçekten faydalı bir konu daha :D devamını bekliyorum. :)
 

Üst