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

سؤال في الnested class و تحكم متغير خارجي فيها

مغلق
بدأه علي110 في 18 نوفمبر 2004 · 4 رد · 536 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله

أولا أنا عضو جديد و هو شبه مخجل أن أبدا مشاركاتي مع منتدى كبير مثل هذا بأسئلة قد تكون بسيطة لكم ولكن وجدت نفسي محتاجا للسؤال فأرجوا السموحة

سؤالي

..... و فارقتني الكلمات أظن الأفضل أن أضع كود سيكون أوضح ....

// this is in a class constracter

JButton j=new JButton("java");
int a;

j.addActionListner( new actionListner(){
                              public void actionPerfomed(actionEvent event){
                                         a=5;//<------ not possible why ??!
                             }
            });

طبعا لو في أخطاء إملائية اعملوا نفسكم ما شفتوها :)

على أي حال طلب مني أن يكون المتغير final

حتى أقدر أدخله في ال inner class

ولكن لن أستطيع تغيره بهذه الطريقة

فهل يمكن تغيير قيمة لمتغير خارجي في كلاس داخلي و إذا ممكن كيف

أرجوا أن لا أكون أثقلت عليكم

أعرف اني شحري يعقد الأمور اكثر

#2

سؤالك يا اخي ليس مفهوم بالشكل المطلوب

   a=5;//<------ not possible why ??!

هذا مش ممكن لان في هذا الاسلوب من اسمه

public void actionPerfomed(actionEvent event

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

if(j.equals("Java"))

//do  something
else
// do Something

اقتباس
فهل يمكن تغيير قيمة لمتغير خارجي في كلاس داخلي و إذا ممكن كيف

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

final int a =5;

تم تعديل هذه المشاركة بواسطة مجدي محمود في 19 نوفمبر 2004 في 00:10

لست متواجد بشكل يومي

#3

أخي مجدي محمود شكرا جزيلا لإهتمامك بسؤالي

و أعتذر لأنني لم أوضح ما أردت ان أسأل

و إعتذار آخر لان مشكلتي لم تكن مشكلة أصلا

سبحان الله كتبت نفس الشي إلي اريده اليوم في الكومبايلر و مشى من غير أخطاء في حين أمس كان يعطيني errors !!!!

و هذا ما كنت أريد أن أسأل

أنني إذا أردت أن تتغير قيمة متغير عند الضغط على زر معين يمكنني عمل ذلك هكذا

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class q1 extends JFrame implements ActionListener{
    JButton something =new JButton("something");
    boolean happened= true;
    
    
    public q1() {
        
        setSize(400,400);
        Container con=getContentPane();
        con.setLayout(new FlowLayout());
        something.addActionListener(this);
        con.add(something);
        pack();
        show();
        
    }
    

    public static void main(String[] args) {
        q1 app=new q1();
        
    }
    
    public void actionPerformed(ActionEvent event) {
        if(event.getSource()==something)
            happened=false;
    }    
    
}

ولكنني أردت أن أفعلها هكذا

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class q1 extends JFrame {
    JButton something =new JButton("something");
    boolean happened= true;
    
    
    public q1() {
        
        setSize(400,400);
        Container con=getContentPane();
        con.setLayout(new FlowLayout());
        something.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event) {
            happened=false;
             }    
        });
        con.add(something);
       // pack();
        show();
        
    }
    

    public static void main(String[] args) {
        q1 app=new q1();
        
    }

و الحمد لله صارت

ما أدري ليش أمس أعطاني إنذارات و مهما أغير في الكود كان يعطيني إنذارات

السموحة

تعبتك معاي وفي النهاية من غير سبب

تم تعديل هذه المشاركة بواسطة علي110 في 19 نوفمبر 2004 في 21:31

#4

اخي علي ...

اذا طريقتك الاولى صحيحة وهي افضل من الثانية لانك راح تقلل من الكود ولكن ينقصك شئ واحد :

انت تبغى تغير قيمة ال a

بدال ماتكتب

a=5;// داخل ال inner class

عرف ال a في الكلاس ....

وبعدين من داخل ال inner class اكتب

ClassName.this.a =5

طبعا ClassName هو اسم الكلاس عندك .

مع ملاحظة ان a يجب ان يكون متغير فئة او instance variable

...................................

انا تعبت زيك قبل فترة في ايجاد حل مثل هذا لكن الحمد لله حصلته ووفر علي مجهود كبير جدا جدا جدا

مع تحياتي

اسف سوف اقطعك من كتابة الكود، ادخل هنا لدقيقتين فقط

http://www.shbab1.com/2minutes.htm

#5

ألف شكر أخي الكريم

كنت أنوي أن أقوم بالحل الذي أقترحته و لكن كما ترى قدرت أشغل نفس الكود الكود إلي ما رضا في البداية بنفس الطريقة

:) و إشتغل عادي

غريبة

هذا الموضوع مغلق.

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