WINDOW BUILDER

WindowBuilder drag/drop(sürükle/bırak) işlemlerini gerçekleştirmek için googlenin geliştirdiği bir plugindir. Kendi sayfasında çok güzel döküman var. Javada sürükle/bırak işlemleri için pluginler vardı ama pek iyi değillerdi. Bu plugin iyi. Buttonu çift tıklayıp istediğiniz kodu yazabilirsiniz veya diğer pluginler gibi componenti sağ tıklayıp event ekleyebilirsiniz.

Eclipse Helios için plugin linki: http://dl.google.com/eclipse/inst/d2wbpro/latest/3.6 Ganymede ve Galileo için burayı tıklayın. Eğer plugin kurmasını bilmiyorsanız bu linkte resimli olarak anlatılmış. Önce bir java projesini oluşturun sonra File–>New–>Other–>WindowBuilder den swing, gwt, swt den birini seçebilirsiniz. Ben swing–>JFrame seçtim. Ikinci yol ise java projesi oluşturduktan sonra resimde belirlenen yeri tıklayıp oluşturabilirisniz. Aşağıdaki resimde görüldüğü gibi sol tarafta Design seçip ve Paletteden istediğiniz componenti sürükleyip bırakabilirisniz.

Aşağıda button tıklandıkça sayi1 değişkenin değerini 1 artırıp labele ve consola yazdırdım. Birinci metod 1-6 ya kadar sayi1 değişkenin değerini artırıyor ve ikinci metod ise 7-12 ye kadar. Bunları Thread ile yapmaya çalıştım. Özellikle bu pluginin ürettiği kod çok anlaşılır geldi bana. Kod rahatlıkla değiştirilebilir durumda.

Arayuz.java

package ethemsulan;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.Serializable;

public class Arayuz extends JFrame implements Serializable{

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Arayuz frame = new Arayuz();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Arayuz() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		final JLabel label = new JLabel("");
		label.setBounds(77, 12, 70, 15);
		contentPane.add(label);

		final ThreadSinifi tObje=new ThreadSinifi();

		JButton btnBasla = new JButton("Basla");
		btnBasla.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
//Sayi 11 den kucuk oldugu surece button tiklandiginda
//ThreadSinifi.java icindeki run() thread metodunu cagiriyor
				if(ThreadSinifi.getSayi1()<=11)
				{
				tObje.run();
				label.setText(String.valueOf(ThreadSinifi.getSayi1()));
				}else{
					tObje.stop();
				}
			}
		});
		btnBasla.setBounds(73, 66, 117, 25);
		contentPane.add(btnBasla);
	}

}

ThreadSinifi.java

package ethemsulan;

public class ThreadSinifi extends Thread {
	private static int sayi1;

	public static int getSayi1() {
		return sayi1;
	}
	public static void setSayi1(int sayi1) {
		ThreadSinifi.sayi1 = sayi1;
	}
	static boolean kontrol=true;
	private Object kilitNesne=new Object();
	public void birinciMetod()
	{
		if(kontrol){
			System.out.println("Birinci thread "+getSayi1()+" degerinden basladi.");
			kontrol=false;
		}
		sayi1++;
		System.out.println(sayi1);
	}
	public void ikinciMetod()
	{
		if(kontrol==false){
			System.out.println("Ikinci Thread "+getSayi1()+" degerinden basladi");
			kontrol=true;
		}
		sayi1++;
		System.out.println(sayi1);
	}
//Once birinci metodu cagirip 0 dan 5 kadar sayi1 degerini artiriyor
//ondan sonra ikinci metodu cagiriyor
	public void run() {
		if(getSayi1()<=5){
			synchronized (kilitNesne) {
				birinciMetod();
			}
		}else if(getSayi1()<=11){
			synchronized (kilitNesne) {
				ikinciMetod();