الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ال Mouselistener

بدأه مياار في 21 يوليو 2009 · 11 رد · 699 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مساء الخير جميعا

عندي سوال شو الفرق بين ال

mouselistenr and mousemotionlistener

كتبت هذا الكود باستخدامهم لكن الوضع مازبط

البرنامج رافض يتعرف على ضغطات الماوس

اتفضلوا الكود

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Play extends JFrame

{ JPanel board ;

JLabel bar ;

Draw d;

public Play()

{ board = new JPanel();

board.setBackground(Color.RED);

add( board, BorderLayout.CENTER);

bar = new JLabel("let's play X-O game");

add( bar,BorderLayout.SOUTH);

d= new Draw();

add(d, BorderLayout.CENTER);

MouseHandler handler = new MouseHandler();

board.addMouseListener(handler);

board.addMouseMotionListener(handler);

}

private class MouseHandler implements MouseListener,MouseMotionListener

{

public void mouseClicked(MouseEvent event)

{

bar.setText(String.format("Clicked at [%d,%d]",event.getX(),event.getY()));

}

public void mousePressed(MouseEvent event)

{

bar.setText(String.format("pressed at [%d,%d]",event.getX(),event.getY()));

}

public void mouseReleased(MouseEvent event)

{

bar.setText(String.format("relase at [%d,%d]",event.getX(),event.getY()));

}

public void mouseEntered(MouseEvent event)

{

bar.setText(String.format("enter at [%d,%d]",event.getX(),event.getY()));

}

public void mouseExited(MouseEvent event)

{

}

public void mouseDragged(MouseEvent event)

{

bar.setText(String.format("deagged at [%d,%d]",event.getX(),event.getY()));

}

public void mouseMoved(MouseEvent event)

{

bar.setText(String.format("moved at [%d,%d]",event.getX(),event.getY()));

}

}

public static void main(String args[]) {

Play window = new Play();

window.setDefaultCloseOperation(EXIT_ON_CLOSE);

window.setSize(340,320);

window.setTitle("X-O game");

window.setVisible(true);

}

}

class Draw extends JComponent

{

public void paintComponent(Graphics g)

{

super.paintComponent(g);

Graphics2D g2d = (Graphics2D) g;

g.setColor(Color.WHITE);

g.drawLine(100,0, 100, 300);

g.drawLine(200,0,200,300);

g.drawLine(0,100,300,100);

g.drawLine(0,200,300,200);

}

}

#2

اللي فهمته من البرنامج أنك تريد أن تنشئ لعبة أكس أو , وللأسف الكود مليااااان أشياء مالها داعي

أنت فكرتك انه اول ماتستقبل البانل نقره تقوم ترسملك أكس أو او , طيب نفترض انه ضبط معك الحدث ,تبقى الفكره بنفسها معجونه :(

ليش ماتخلي اللعب على أزرار بدل من المربعات اللي رسمتها وعند النقر عليها تجلب صورة للأكس أو للأو وتضبطها على الزر اللي نقرت عليه ؟ بتكون أسهل بكثييييييييييير بدل ماترسمها بنفسك

وبتستخدم فقط ليسنر واحد وهو ActionListener

أنا عدلتلك الكود تعديل بسيط عشان تفهم فكرتي وبجانبه برنامج سويته قبل فتره وفكرته مشابهه لفكرتك وإذا مافهمته مستعد أشرحه لك :)

Play.rar

TicTacToe.rar

تقبل مروري :)


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#3

شكرا جزاك الله خير

انا فكرتي انه يستقبل نقره ويقارن احداثيتها باحداثيات المربع وبعد كذا يرسم x or o

طبعا اذا كان المربع فاضي لكن مشكلة كودي رافض يتعرف على النقرات ما بعرف ليش ؟؟

حملت اكوادك وجاري الاطلاع عليها

ولي عوده إن شاء الله

#4

مساء الخير عندي شوية استفسارات

JButton but[] = new JButton[9];

هنا عرفت متغير اسمه but مصفوفه الازارير

board = new JPanel(new GridLayout(3,3));

هنا رتبت اللازارير على البانل 3 صفوف و3 اعمده

for(int i=0;i<but.length;i++){
	but = new JButton();
	but.addActionListener(this);
	board.add(but);

}

ياليت توضح هنا الفكره

((JButton) e.getSource()).setBackground((player1 ? Color.red : Color.green ));
	player1 = !player1;

كمان هذا ما فهمته

وسامحني على قلة معرفتي

#5

أهلاً بك أخي العزيز

اقتباس
JButton but[] = new JButton[9];

هنا عرفت 9 أزرار على شكل مصفوفه ( إختصار للكود)

اقتباس
board = new JPanel(new GridLayout(3,3));

هذه نفس البانل اللي عرفتها أنت لكن قسمتها إلى 3 صفوف و3 أعمده بإستخدام GridLayout لكي يحتوي كل صف وكل عمود على 3 أزرار ويتم ترتيب الأزرار بشكل تلقائي عند إضافتها

اقتباس
((JButton) e.getSource()).setBackground((player1 ? Color.red : Color.green ));

player1 = !player1;

هنا قمت بعمل cast للأوبجكت الذي تعيده الداله getSource وتشير إلى المكون الذي أطلق الحدث ولكن تعيده على شكل Object وبما ان نوع المكون الذي أطلق الحدث من نوع زر فلذلك نقوم بتحويله من الحاله العامه (Object) إلى حالته الأصليه JButton لكي يتم التعامل معه كبوتون وليس كأوبجكت

هذا كود بديل للكود السابق :

JButton b = (JButton) e.getSource();
 if(player1==true){
	b.setBackground(Color.red); 
	player1 = false;
 }
 else{
   b.setBackground(Color.green);
   player1 = true;
 }

player1 : عباره عن متغير من نوع boolean وأستخدمته لمعرفة دور أي لاعب فإذا كان true فيعني انه دور اللاعب الأول وإذا كان العكس فهو دور اللاعب الثاني ومن ثم يقوم بتلوين الزر باللون الخاص بكل لاعب حسب الدور

أي سؤال أو استفسار تحت أمرك


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#6

جزاك الله كل الخير نورتني بالمعلومات

انا على بالي عملية ال casting تصير بس لل int و ال stirng

اول مره اعرف كمان تصير لل component

بعد الاطلاع على كودك ممكن تشرحلي شو يعني هذا الجزء

	 
 static Thread th=new Thread(new Runnable(){
 public void run(){
 	tec.setSize(0,0);
 	tec.show();
 	for(int s=1;s<=320;s++){
 	tec.setSize((s<=300?s:300),tec.getHeight());
 	tec.setSize(tec.getWidth(),s);
 	tec.repaint();
 	tec.getToolkit().sync();
 	try
 	{
 	 th.sleep(1);	
 	}
 	catch(Exception ex){

 	}
 	}
	tec.pack();
 }	
 } );  
 static Thread th2=new Thread(new Runnable(){

 public void run(){

 	for(int s=1;s<=300;s++){
	tec.setLocation((s <= xLoc ? s : xLoc),(s <= yLoc ? s : yLoc));
	try
	{
		th2.sleep(1);
	}
	catch(Exception ex){

	}
 	}
 	tec.setLocation(xLoc,yLoc);
 	tec.pack();	
 }	
 });

كمان هنا ليه خليت الargument null في الjpanel

 private static JPanel p=new JPanel(null),mP=new JPanel(null);

وشكرا

#7

هذا الجزء غير مهم , سويت الثريدين اللي فوق فقط عشان يحركولي الفريم إلى منتصف الشاشه مع التكبير بالتدرج واحد للطول وواحد للعرض وقد ألغيت عمله قبل ما اطلعلك البرنامج

أما بالنسبة للـnull فهذا يعني إلغاء الLayout للبانل عشان أقدر اتحكم بالإحداثيات بالبكسل

على فكره البرنامج مليان عيوب لأني سويته في بداياتي مع الجافا وقد له شهور وعليه غبار :) بس تقدر انت تعدل فيه مثلما تحب

بس المهم توصلك الفكره نفسها وإذا لقيت أي غموض أسأل وإن شاء الله ماأقصر :)


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#8

طيب شكرا

لكن ما اتلغى عمل الثريد برنامجك الفريم يجي عندي بمنتصف الشاشه بحركه حلوه عجبتني الفكره

ممكن تشرحلي كود الثريد

بالعكس برنامجك مو مليان عيوب فتحلي مواضيع جديده استفدت منه كثييييييييييير

بالنسبه لتعديله افكر اضيف ميزه اخلي المستخدم يلعب ضد الكمبيوتر

وجزاك الله الف خير

#9

استخدمي A* algorthim لجعل الكمبيوتر يلعب مع الإنسان

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#10

أهلاً أخي العزيز علاء منور الموضوع بصراحه :)

ممكن تعطينا فكره كيف نطبق خوارزمية A* على اللعبه , لأننا للأسف درسنا الذكاء الصناعي نظري وعلى يد أستاذ أسأل الله الا يبلي مسلم بمثله :(

إذا ماعندك مانع يعني وجزاك الله خير


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#11

أخ محمد

الخوارزمية A* ثابتة لجميع الألعاب

لكن المتغير فيها هي آلية التقدير ما يسمى بالدالة التقديرية Heuristic Function

قمت بكتابة الخوارزم مرة

سأبحث لك عنه

لكن أغلب الظن أنه ضاع في أحد المعارك الفورماتية للجهاز

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12

ان شاء الله تلاقيه , بتسوي فيني أجر كبييييير , لأنه اللي كان يدرسنا أستغفر الله العظيم ماينفع حتى يكون استاذ رياضه بس ايش نسوي امرنا لله , درسناها بشكل نظري والتطبيق اللي بالبرولوق ولا له أي علاقه باللي ندرسه فكرهنا الماده وماكان لنا نفس حتى نسمع أسمها :(

فلو عرفت بس الأساسيات بشكل جيد إن شاء الله بكمل الباقي أنا

وأشكرك جزيل الشكر عزيزي علاء


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

مواضيع مشابهة