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

هل هناك طريقة لتنفيذ مستمع الحدث ليعمل ك فصيلة خارجية

بدأه sameh mahmoud في 2 مارس 2009 · 5 رد · 632 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــة ،،

انا افضل ان تكون كل كلاس فى ملف خاص بها

قمت بعمل كلاس تسمى "Form1" و هى مشتقة من JFrame

و كلاس "sameh" وهى الرأيسية

وكلاس "EventOfForm1" وهى implement من ItemListener

وهذه الكلاس ("EventOfForm1") بها الطريقة "itemStateChanged"

ولكن للاسف عند محاولة وضع هذه الكلاس فى ملف خاص لا تستطيع الوصول لكائنات مصدر الحدث المعرفة فى الكلاس "Form1" رغم المحاولة التالية :

عمل باكج لهذه الكلاسات الثلاثة

و تعريف الكائنات المراد الوصول اليها , بمحدد الوصول public لائمكانية الوصول اليها من كل مكان و تعريها على انها static لائمكانية الوصول اليها بدون عمل اوبجكت من ال Form1

و استدعاء الكلاس Form1 فى اول الكلاس EventOfForm1

لكن عند ترجمة الكلاسات بهذه الجملة

javac Form1.java innerEvent1.java sameh.java

و المثال فى المرفقات

يظهر الخطأ التالي

اقتباس
D:\Form4>javac sameh.java EventOfForm1.java Form1.java

EventOfForm1.java:17: cannot resolve symbol

symbol : method check1 ()

location: class Form4.samehX.Form1

if(event.getSource() == Form1.check1())

^

EventOfForm1.java:26: non-static variable check2 cannot be referenced from a sta

tic context

if(event.getSource() == Form1.check2)

^

EventOfForm1.java:34: non-static variable text1 cannot be referenced from a stat

ic context

Form1.text1.setFont(new Font("serif",ValBold + ValItalic,14));

ما هو حل هذه المشلكة و جزاكم الله خيرا

و السلام عليكــم ورحمـة الله وبركاتــة ،،

Form4.rar

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 2 مارس 2009 في 14:55

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#2

السلام عليكم

أول ملاحظة: بما أنك تكتب هذا السطر

package Form4.samehX;

فملفاتك يجب أن تكون داخل المجلد samehX الذي بدوره داخل Form4

الملاحظة الثانية

بالنسبة للمتحولات check1 check2 text1 يجب أن تحدد بأنها تنتمي إلى object من نوع Form1، ويجب أن يكون هو نفسه الذي قام بالمناداة على الlistener



import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import Form4.samehX.Form1;

public class EventOfForm1 implements ItemListener
{
private int ValBold = Font.PLAIN;
private int ValItalic = Font.PLAIN;
private Form1 caller; //this is a reference to the Form1 which called this listener

public EventOfForm1(Form1 caller)
{
this.caller = caller;
}

public void itemStateChanged(ItemEvent event)
{
if(event.getSource() == caller.check1)
{
if(event.getStateChange() == ItemEvent.SELECTED)
ValBold = Font.BOLD;
else
ValBold = Font.PLAIN;
}


if(event.getSource() == caller.check2)
{
if(event.getStateChange() == ItemEvent.SELECTED)
ValItalic = Font.ITALIC;
else
ValItalic = Font.PLAIN;
}
caller.text1.setFont(new Font("serif",ValBold + ValItalic,14));
}
}
 package Form4.samehX;

وفي الForm1 تقوم بتعديل هذا السطر

 EventOfForm1 eof1 = new EventOfForm1(this);	   //this is the caller of the listener, so we give its reference to this listener

#3

شكرا يا باشمهندس herch على المساعدة و ربنا يوفقك لقد تمت العملية بنجاح

اسمحلي اسألك سؤال كمان و هوا كالتالي

انا اقرأ كتاب ذو شرح مبسط ولكن للاسف فاتته بعض الاشياء

و السؤال هو

ما هو المعنى العام لهذه الجملة

JPasswordField pwd =( JPasswordField ) event.getSource();

ليس المطلوب هو المعنى المباشر للجملة و لكن المطلوب هو معنى شكل الجملة

علشان بتعدي عليا جمل كتير من هذا الشكل

سطر مثلا ذي داه

Graphics2D g2 = (Graphics2D)g;

احنا لما بنعرف كلاس مثلا من نوع "class1"

يكون التعريف كالتالي

class1 c1 = new class1();

او

class1 c1;

c1 = new class1();

و لو مثلا ال class1 بيحتوى على constructor بيطلوب معامل integer

class1 c1 = new class1(1);

يبقى ايه معنى هذا الشكل الغريب لهذه الجملة ؟؟؟

لانى كل مشوف شكل الجملة داه بصراحة بخاف :S

انا اسف

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 2 مارس 2009 في 16:58

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#4

BUZZ !!

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#5

بالله عليكم انا منتظر اجابة هذا الاستفسار

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#6

event.getSource() تعطي ناتج من نوع Object، وبما أنك هنا

JPasswordField pwd =( JPasswordField ) event.getSource();

تحتاج إلى JPasswordField فإنك تقوم بعملية الcasting،

http://java.sun.com/docs/books/tutorial/ja...subclasses.html

http://home.cogeco.ca/~ve3ll/jatutor5.htm

تم تعديل هذه المشاركة بواسطة herch في 2 مارس 2009 في 17:47

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…