Konuyu görüntüle
IUCODERS FORUM > Programlama > JAVA > html 'de ekranı üç parçaya bölmek
Yazar
volkan


avatar
Giresun
Kayıt: 26.07.2006
26.06.2007-11:19 #23677
Soru şöyleydi.
Mouse'a basılınca ekrana daire çizilmesi istemiyor.
mouse herhangi bir daire içindeyken F1=red,F2=blue ve F3=gren'ten birine basılınca o dairenin rengi değişiyor.Ayrıca bu tuşlara bastıktan sonra diğer çizeceğimiz dairelerinde renkleri dağişen daire'nin renginde oluyor.

Mouse herhangi bir daire üzerindeyken D veya DELETE tuşuna basılırsa o daire ekrandan siliniyor.

Sağ üst köşedede ekranda bulunan daire sayısının gösterilmesi isteniyor.

Ben her nokta'ya birde o noktanın rengini tutan bi değişken verdim. Ama yinede biyerde birşyler eksik gibi..






Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
29.06.2007-23:41 #23911
volkan yazdi
 
Soru şöyleydi.
Mouse'a basılınca ekrana daire çizilmesi istemiyor.
mouse herhangi bir daire içindeyken F1=red,F2=blue ve F3=gren'ten birine basılınca o dairenin rengi değişiyor.Ayrıca bu tuşlara bastıktan sonra diğer çizeceğimiz dairelerinde renkleri dağişen daire'nin renginde oluyor.

Mouse herhangi bir daire üzerindeyken D veya DELETE tuşuna basılırsa o daire ekrandan siliniyor.

Sağ üst köşedede ekranda bulunan daire sayısının gösterilmesi isteniyor.

Ben her nokta'ya birde o noktanın rengini tutan bi değişken verdim. Ama yinede biyerde birşyler eksik gibi..

Biraz önce bu tanımlanan olayları birebir gerçekleştiren bir uygulama yazdım. Şu anda satırlara açıklama ekliyorum kolay anlaşılsın diye. Birazdan kodu buraya ekliycem. Meraklılara duyrulur.





Let`s make this world a better place to live !

Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
30.06.2007-00:00 #23912
İşte geldi, buyrun:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

public class Soru extends Applet
	implements  KeyListener, MouseListener, MouseMotionListener {

	Point mouseCoord; // fareyi surekli takip eder
	Color brush = Color.black; // firca rengi
	ArrayList<Graphics> list = new ArrayList<Graphics>(); // grafik listesi
	Label label = new Label("Toplam: 0"); // sekil sayisini gosteren etiket

	public void init() {
		/* olaylari dinle */
		addKeyListener(this);
		requestFocus();
		addMouseListener(this);
		addMouseMotionListener(this);

		/* etiketi yerlestir */
		this.setLayout(null);
		add(label);

		/* etiket klavye dinlemeli yoksa klavye hic dinlenmez */
		label.addKeyListener(this);
		label.requestFocus();
	}

	public void paint(Graphics g) {

		/* Listedeki daireleri ciz */
		Rectangle r;
		int numOvals = list.size();
		for(int i=0; i<numOvals; i++) {
			g = list.get(i); // listeden nesneyi cek

			/* grafigi ciz */
			r = g.getClipBounds();
			g.fillOval(r.x, r.y, r.width, r.height);
		}

		/* Toplam daire sayisini goster */
		label.setBounds(getWidth()-80,0, 80, 20);
		label.setText("Toplam: "+list.size());
	}

	/* farenin altında en ondeki direnin ve fircanin rengini degistirir  */
	public void ChangeBrush(Color c) {
		Graphics g;
		Shape s;
		Rectangle r;
		int i, numOvals = list.size(); // eleman sayisini bul
		this.brush = c; // firca rengini degistir
		
		/* fare altinda en ondeki daireyi bulur */
		for(i=numOvals-1; i>=0; i--) {
			g = list.get(i); // listeden nesneyi cek
			s = g.getClip(); // nesnenin sekli
			if(s.contains(mouseCoord.x, mouseCoord.y)) {
				g.setColor(brush); // dairenin rengini degistir

				/* sadece gecerli daireyi yeniden ciz */
				r = g.getClipBounds();
				repaint(r.x, r.y, r.width, r.height);
				break;
			}
		}
	}

	public void keyPressed(KeyEvent ke) {
		int keynum = ke.getKeyCode();
		if(keynum == KeyEvent.VK_DELETE || keynum == KeyEvent.VK_D) {
			Graphics g;
			Shape s;
			Rectangle r;
			int i, numOvals = list.size(); // eleman sayisini bul

			/* fare altinda en ondeki daireyi bulur */
			for(i=numOvals-1; i>=0; i--) {
				g = list.get(i); // listeden nesneyi cek
				s = g.getClip(); // nesnenin sekli
				if(s.contains(mouseCoord.x, mouseCoord.y)) {
					list.remove(g); // sekli listeden sil

					/* silinen yeri tazele */
					r = g.getClipBounds();
					repaint(r.x, r.y, r.width, r.height);
					break;
				}
			}
		}
		else if(keynum == KeyEvent.VK_F1)
			ChangeBrush(Color.red);
		else if(keynum == KeyEvent.VK_F2)
			ChangeBrush(Color.blue);
		else if(keynum == KeyEvent.VK_F3)
			ChangeBrush(Color.green);
	}
	public void keyReleased(KeyEvent ke) {
	}
	public void keyTyped(KeyEvent ke) {
	}

	public void mouseClicked(MouseEvent me) {
	}
	public void mousePressed(MouseEvent me) {
		Graphics g = getGraphics(); // yeni grafik nesnesi
		g.setColor(brush); // nesnenin rengini ayarla
		
		/* 20px yaricapli dairenin merkez koordinatlari */
		int x = me.getX()-20;
		int y = me.getY()-20; 
		
		g.setClip(x,y,40,40); // sekli ayarla
		list.add(g); // sekli listeye ekle
		repaint(x,y,40,40); // olay bolgesini tazele
	}
	public void mouseReleased(MouseEvent me) {
	}
	public void mouseExited(MouseEvent me) {
	}
	public void mouseEntered(MouseEvent me) {
	}

	public void mouseDragged(MouseEvent me) {
	}
	public void mouseMoved(MouseEvent me) {
		/* fare koordinatlarini izle */
		mouseCoord = me.getPoint();
	}
}






Let`s make this world a better place to live !

Yazar
volkan


avatar
Giresun
Kayıt: 26.07.2006
30.06.2007-01:12 #23917
Eline sağlık şafak.. Süper olmuş.. gayet anlaşılır yorumlarda yazmışsın teşekkür ederim






Yazar
volkan


avatar
Giresun
Kayıt: 26.07.2006
30.06.2007-01:15 #23920
ArrayList<Graphics> list = new ArrayList<Graphics>();

Javada nesne dizileri böylemi tanımlanıyor?

Kendi nesnemin diziside olabilir mi?







Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
30.06.2007-01:20 #23921
volkan yazdi
 
ArrayList<Graphics> list = new ArrayList<Graphics>();

Javada nesne dizileri böylemi tanımlanıyor?

Kendi nesnemin diziside olabilir mi?

Bu özel bir sınıf. Normal dizi de yapabilirdim ama bu daha kullanışlı. Aradan eleman sildiğinde o elemandan sonraki elemanların indisleri kendiliğinden eksiliyor. Aynı zamanda boyutu da dinamik olarak değişebiliyor. Bir çeşit özelleşmiş liste diyebiliriz.

Edit: Eklemeyi unutmuşum, bu yapı her türlü nesneyi depolayabilir.





Let`s make this world a better place to live !

Yazar
reccae


avatar
istanbul
banlandı
Kayıt: 15.02.2006
30.06.2007-01:21 #23923
bide şu özel olmayan yöntemle yapsak şafak clown





insa ettigim binanin cimentosu kelâm

Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
30.06.2007-01:40 #23928
reccae yazdi
 
bide şu özel olmayan yöntemle yapsak şafak clown

Yapmasına yaparsın ama boşuna kasmaya gerek yok, bu çok daha kolay. peace





Let`s make this world a better place to live !

Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
30.06.2007-03:22 #23964
Şimdi farkettim contains metodu Rectangle sınıfında da tanımlıymış. Yani bu durumda alan tespiti için Shape kullanmaya gerek yok. Neyse Shapesiz halini de yazayım, düzenlerken kafa karışıkığı olmasın:


import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

public class SoruAlt extends Applet
	implements  KeyListener, MouseListener, MouseMotionListener {

	Point mouseCoord; // fareyi surekli takip eder
	Color brush = Color.black; // firca rengi
	ArrayList<Graphics> list = new ArrayList<Graphics>(); // grafik listesi
	Label label = new Label("Toplam: 0"); // sekil sayisini gosteren etiket

	public void init() {
		/* olaylari dinle */
		addKeyListener(this);
		requestFocus();
		addMouseListener(this);
		addMouseMotionListener(this);

		/* etiketi yerlestir */
		this.setLayout(null);
		add(label);

		/* etiket klavye dinlemeli yoksa klavye hic dinlenmez */
		label.addKeyListener(this);
		label.requestFocus();
	}

	public void paint(Graphics g) {

		/* Listedeki daireleri ciz */
		Rectangle r;
		int numOvals = list.size();
		for(int i=0; i<numOvals; i++) {
			g = list.get(i); // listeden nesneyi cek

			/* grafigi ciz */
			r = g.getClipBounds();
			g.fillOval(r.x, r.y, r.width, r.height);
		}

		/* Toplam daire sayisini goster */
		label.setBounds(getWidth()-80,0, 80, 20);
		label.setText("Toplam: "+list.size());
	}

	/* farenin altında en ondeki direnin ve fircanin rengini degistirir  */
	public void ChangeBrush(Color c) {
		Graphics g;
		Rectangle r;
		int i, numOvals = list.size(); // eleman sayisini bul
		this.brush = c; // firca rengini degistir
		
		/* fare altinda en ondeki daireyi bulur */
		for(i=numOvals-1; i>=0; i--) {
			g = list.get(i); // listeden nesneyi cek
			r = g.getClipBounds();
			if(r.contains(mouseCoord.x, mouseCoord.y)) {
				g.setColor(brush); // dairenin rengini degistir

				/* sadece gecerli daireyi yeniden ciz */
				repaint(r.x, r.y, r.width, r.height);
				break;
			}
		}
	}

	public void keyPressed(KeyEvent ke) {
		int keynum = ke.getKeyCode();
		if(keynum == KeyEvent.VK_DELETE || keynum == KeyEvent.VK_D) {
			Graphics g;
			Rectangle r;
			int i, numOvals = list.size(); // eleman sayisini bul

			/* fare altinda en ondeki daireyi bulur */
			for(i=numOvals-1; i>=0; i--) {
				g = list.get(i); // listeden nesneyi cek
				r = g.getClipBounds();
				if(r.contains(mouseCoord.x, mouseCoord.y)) {
					list.remove(g); // sekli listeden sil

					/* silinen yeri tazele */
					repaint(r.x, r.y, r.width, r.height);
					break;
				}
			}
		}
		else if(keynum == KeyEvent.VK_F1)
			ChangeBrush(Color.red);
		else if(keynum == KeyEvent.VK_F2)
			ChangeBrush(Color.blue);
		else if(keynum == KeyEvent.VK_F3)
			ChangeBrush(Color.green);
	}
	public void keyReleased(KeyEvent ke) {
	}
	public void keyTyped(KeyEvent ke) {
	}

	public void mouseClicked(MouseEvent me) {
	}
	public void mousePressed(MouseEvent me) {
		Graphics g = getGraphics(); // yeni grafik nesnesi
		g.setColor(brush); // nesnenin rengini ayarla
		
		/* 20px yaricapli dairenin merkez koordinatlari */
		int x = me.getX()-20;
		int y = me.getY()-20; 
		
		g.setClip(x,y,40,40); // sekli ayarla
		list.add(g); // sekli listeye ekle
		repaint(x,y,40,40); // olay bolgesini tazele
	}
	public void mouseReleased(MouseEvent me) {
	}
	public void mouseExited(MouseEvent me) {
	}
	public void mouseEntered(MouseEvent me) {
	}

	public void mouseDragged(MouseEvent me) {
	}
	public void mouseMoved(MouseEvent me) {
		/* fare koordinatlarini izle */
		mouseCoord = me.getPoint();
	}
}



Ama yine de daireyi kapsayan en küçük kareye göre yapılıyor farenin altında kalan daire üzerindeki işlemler. Yani köşelerdeki boşluklar da olaya karışıyor. Aslında bunun mükkemmel olması için biraz geometri çalıştırabiliriz. Farenin bulunduğu koordinat ile dairein merkezi arasındaki mesafe dairenin yarıçapına eşit ya da küçük ise işlemi yap gibisinden. Tabii bu tarama yine en son eklenen daireden başlayarak yapılacak. Var mı böyle bir karşılaştırma fonksiyonu yazabilecek gönüllü?

Aslında basit gibi duruyor, uyumazsam birazdan yazarım belki. biggrin
Var mı ben gibi canı sıkıldıkça program yazan. silly


Bu arada Sun'ın sitesindeki klavuz çok hoşuma gitti:

http://java.sun.com/j2se/1.4.2/docs/api/index.html





Let`s make this world a better place to live !

Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
30.06.2007-03:59 #23966
İşte o kontrolü yapacak olan fonksiyon da hazır:

boolean isPointOnCircle(Graphics oval, Point p) {
	Rectangle r = oval.getClipBounds();
	double cap = (r.width)/2;
	double centerX = (r.x) + cap;
	double centerY = (r.y) + cap;
	double distance = Math.sqrt(Math.pow((centerX - p.x),2) + Math.pow((centerY - p.y),2));
	if(distance <= cap)
		return true;
	else
		return false;
}


Şimdi de fonksiyonu koda entegre edelim:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

public class SoruAlt extends Applet
	implements  KeyListener, MouseListener, MouseMotionListener {

	Point mouseCoord; // fareyi surekli takip eder
	Color brush = Color.black; // firca rengi
	ArrayList<Graphics> list = new ArrayList<Graphics>(); // grafik listesi
	Label label = new Label("Toplam: 0"); // sekil sayisini gosteren etiket

	public void init() {
		/* olaylari dinle */
		addKeyListener(this);
		requestFocus();
		addMouseListener(this);
		addMouseMotionListener(this);

		/* etiketi yerlestir */
		this.setLayout(null);
		add(label);

		/* etiket klavye dinlemeli yoksa klavye hic dinlenmez */
		label.addKeyListener(this);
		label.requestFocus();
	}

	public void paint(Graphics g) {

		/* Listedeki daireleri ciz */
		Rectangle r;
		int numOvals = list.size();
		for(int i=0; i<numOvals; i++) {
			g = list.get(i); // listeden nesneyi cek

			/* grafigi ciz */
			r = g.getClipBounds();
			g.fillOval(r.x, r.y, r.width, r.height);
		}

		/* Toplam daire sayisini goster */
		label.setBounds(getWidth()-80,0, 80, 20);
		label.setText("Toplam: "+list.size());
	}

	/* farenin altında en ondeki direnin ve fircanin rengini degistirir  */
	public void ChangeBrush(Color c) {
		Graphics g;
		Rectangle r;
		int i, numOvals = list.size(); // eleman sayisini bul
		this.brush = c; // firca rengini degistir
		
		/* fare altinda en ondeki daireyi bulur */
		for(i=numOvals-1; i>=0; i--) {
			g = list.get(i); // listeden nesneyi cek
			r = g.getClipBounds();
			if(isPointOnCircle(g, new Point(mouseCoord.x, mouseCoord.y))) {
				g.setColor(brush); // dairenin rengini degistir

				/* sadece gecerli daireyi yeniden ciz */
				repaint(r.x, r.y, r.width, r.height);
				break;
			}
		}
	}

	private boolean isPointOnCircle(Graphics oval, Point p) {
		Rectangle r = oval.getClipBounds();
		double cap = (r.width)/2;
		double centerX = (r.x) + cap;
		double centerY = (r.y) + cap;
		double distance = Math.sqrt(Math.pow((centerX - p.x),2) + Math.pow((centerY - p.y),2));
		if(distance <= cap)
			return true;
		else
			return false;
	}

	public void keyPressed(KeyEvent ke) {
		int keynum = ke.getKeyCode();
		if(keynum == KeyEvent.VK_DELETE || keynum == KeyEvent.VK_D) {
			Graphics g;
			Rectangle r;
			int i, numOvals = list.size(); // eleman sayisini bul

			/* fare altinda en ondeki daireyi bulur */
			for(i=numOvals-1; i>=0; i--) {
				g = list.get(i); // listeden nesneyi cek
				r = g.getClipBounds();

				if(isPointOnCircle(g, new Point(mouseCoord.x, mouseCoord.y))) {
					list.remove(g); // sekli listeden sil

					/* silinen yeri tazele */
					repaint(r.x, r.y, r.width, r.height);
					break;
				}
			}
		}
		else if(keynum == KeyEvent.VK_F1)
			ChangeBrush(Color.red);
		else if(keynum == KeyEvent.VK_F2)
			ChangeBrush(Color.blue);
		else if(keynum == KeyEvent.VK_F3)
			ChangeBrush(Color.green);
	}
	public void keyReleased(KeyEvent ke) {
	}
	public void keyTyped(KeyEvent ke) {
	}

	public void mouseClicked(MouseEvent me) {
	}
	public void mousePressed(MouseEvent me) {
		Graphics g = getGraphics(); // yeni grafik nesnesi
		g.setColor(brush); // nesnenin rengini ayarla
		
		/* 20px yaricapli dairenin merkez koordinatlari */
		int x = me.getX()-20;
		int y = me.getY()-20; 
		
		g.setClip(x,y,40,40); // sekli ayarla
		list.add(g); // sekli listeye ekle
		repaint(x,y,40,40); // olay bolgesini tazele
	}
	public void mouseReleased(MouseEvent me) {
	}
	public void mouseExited(MouseEvent me) {
	}
	public void mouseEntered(MouseEvent me) {
	}

	public void mouseDragged(MouseEvent me) {
	}
	public void mouseMoved(MouseEvent me) {
		/* fare koordinatlarini izle */
		mouseCoord = me.getPoint();
	}
}



İşte bu kadar... Daha mükkemmel hale getirebilmek için başka fikri olan varsa paylaşssın. wink

İyi geceler...





Let`s make this world a better place to live !

Yazar
volkan


avatar
Giresun
Kayıt: 26.07.2006
30.06.2007-10:57 #23972
repaint(x,y,40,40); yerine
paint(g); koydum yine çalıştı. Benim bilmediğim. Şafak requestFocus() ne işe yarıyor? Kullanmazsak ne olur? Neden ihtiyaç duymuşlarki bu koda? Daha önce hiç kullanmadım. İnternettede güzel bir açıklama yok.

Kodun bu haliyle zaten mükemmel, daha iyisine luzum yok.






Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
30.06.2007-17:08 #24000
repaint(x,y,40,40); yerine
paint(g);
oluyor fakat silme işleminde istenilen sonucu vermiyor. Çünkü silme işlemi sadece geçerli nesnenin listeden çıkarılması üzerine kurulu. Yani o nesneyi yok edebilecek bir yöntem bulamadım java'da. Zaten yok etsek bu sefer de paint() boş referans alacağından istenilen sonucu vermez. Ama diğer metodlarda paint(g) daha güzel ve temiz.

requestFocus() ile program klavye odağı talep ediyor. Ayrıntıları bilmiyorum ama bu metodu çağırmadan program klavye olaylarını algılamıyor.





Let`s make this world a better place to live !

1 2 3
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb