Java kütüphaneleri size herhangi bir işlem için bir çok farklı seçenek sunmakta ama temelde her şeye bir pencere oluşturarak ve onun içinde bir nesneyi hareket ettirerek işleme başlayabilirsiniz. Bunun içinde şöyle bir yol izlemeniz iyi olacaktır.
- constructer dahilinde butonlar belirlemek ve onları dinlemeye başlamak, gerekli hareketin oluşması için bir zamanlayıcı belirlemek.
- işlemleri dinleyen, hareketi sağlayan ve nesneyi çizdiren methodları oluşturmak.
- main() metoda işlemleri sıralamak.
osman adlı class ile yaptığım aşağıdaki örneği sadece kod kısımlarını alıp birleştirerek tek parça halinde çalıştırabilirsiniz. Araya eklediğim yorumları dikkate alarak birleştirmenizi anlama açısından tavsiye ederim.
import java.awt.BorderLayout;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.Timer;
import lar ile awt ve swing kütüphanelerini çağırıyoruz. implements çok sevilen bir yol olmasa da hareketleri dinlemek için bunu kullanıyoruz.
public class osman extends JPanel implements ActionListener {private JButton btnMove, btnStop;private int x;private Timer timer;public osman() {x=100;btnMove=new JButton("Hareketlen");btnStop=new JButton("Dur");setLayout(new BorderLayout());add(btnMove,BorderLayout.NORTH);add(btnStop,BorderLayout.SOUTH);btnMove.addActionListener(this);btnStop.addActionListener(this);timer=new Timer(100,this);}
butonları, zamanlayıcı ve x adında bir değişken tanımlıyoruz. "public osman()" constructer dahilinde butonları yerleştirip, onları dinlemeye alıyoruz. zamanlayıcıyı belirliyoruz. x değişkenini ise nesnenin yatay konumda nerede başlayacağını belirlemek için kullanacağız. Örnek olarak "100" verilmiştir.
public void actionPerformed(ActionEvent e){if(e.getSource().equals(btnMove))timer.start();else if(e.getSource().equals(btnStop))timer.stop();elsemoveRectangle();repaint();}
"public void actionPerformed(ActionEvent e)" yapılan hareketleri dinlemek için kullanılıyor. butonlara basılamasına göre zamanı durdurup başlatıyor. Zaman akmaya devam ederken butonlara basılmamış ise "moveRectangle();" diyerek nesne hareket ettiriliyor ve "repaint();" ile tekrar çizdiriliyor.
public void moveRectangle(){if(x<=380) x=x+10;else x=0;}
nesne hareket ettirme işlemini x değişkenini yani objenin yataydaki konumunu değiştirerek yapıyoruz.
public void paintComponent(Graphics g){super.paintComponent(g);g.drawRect(x, 55, 50, 50);}
x e bağlı olarak nesneyi çizdiriyoruz.
public static void main(String[] args) {JFrame window=new JFrame("TEST");osman m=new osman();window.getContentPane().add(m);window.setBounds(100, 100, 0, 0);window.setSize(400, 200);window.setVisible(true);}}
main metodunda pencereyi tanımlıyoruz. yeni bir osman çağırıp pencereye ekliyoruz. "setBounds" kullanarak pencerenin ekrandaki yerini belirliyoruz. "setSize" ile boyut veriyoruz, "setVisible" ile de görünür kılıyoruz.