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

اسم radio تم اختيارة

مغلق
بدأه - a l t - في 21 أكتوبر 2005 · 10 رد · 696 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

في تطبيق : عندي اربعة radioButton يجمعهم group

هل فيه طريقة اعرفة بها أسم المتغير الي تم اختيارة.

اسم المتغير وليس ال text .

وشكراا

11_03_06_12_48_57_1142110137Image(_66).jpg

#2

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

طبعا هذا الكلام ليس من عندي ولكن اذكر اني قرأت مقالة او سؤال في موقع صن كان قريب لسؤالك.

هل من الممكن ان تخبرنا لماذا تود معرفة اسم الكائن؟ ودعنا نتناقش؟

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

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

#3

نعم دعنا نتاقش

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#4

كما قال الاخوة

اقتباس
انه من المستحيل ان تحتاج لمعرفة اسم الكائن

ولكن لامكانك عبر فحص بسيط ( if ...else )

ان تعرف اسم المتغير

منقطع من حين لاخر

#5

اخي ابو الفؤاد:

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

ممكن توضح لنا الطريقة ذكرتها ؟؟

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

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

#6

حاولت معرفت اسم الكائن بطريقه لترقيم ال radio ا 1,2,3,4 على التوالي،

و طريقة اخرى لمعرفت الكائن وتسميته بـ if .. else

وقبل ما ابدء في التنفيذ تذكرت المثل الى يقول " وين أذنك يا حبشي ".

لان فعلا اسم الكائن ما يفيدني، على الاقل في هذا الوقت.

اقتباس
من المستحيل ان تحتاج لمعرفة اسم الكائن

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

مثال:

لو عندي 4 radio معرفه باسماء A,B,C,D

وهي خيارات لاجابه على سؤال

ولمعرفة الفقره التي اختارها المستخدم سأحتاج الى اسم المكون ( A أو B أو C أو D )،

وهذا ما احتاج اليه في تجربتي هذي.

بدلا من اللفه الطويله و استخدام if..else

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

11_03_06_12_48_57_1142110137Image(_66).jpg

#7
اقتباس
ولمعرفة الفقره التي اختارها المستخدم سأحتاج الى اسم المكون ( A أو B أو C أو D )،

ماذا عن هذه الطريقة:

اعمل مصفوفة فيها 4 عناصر من نوع radio كالتالي:

JRadioButton [] radioArray = new JRadioButton [4];
        radioArray[0] = new JRadioButton("Choice 1");
        radioArray[1] = new JRadioButton("Choice 2");
        radioArray[2] = new JRadioButton("Choice 3");
        radioArray[3] = new JRadioButton("Choice 4");

وبعد ذلك يمكننا التحقق وذلك باستخدام رقم العنصر بالمصفوفة بدلا من A ,B ,C , D .. واطن ذلك افضل.

اذا كنت مصمم على استخدام A,B,C,D فلماذا لاتعمل فئة جديدة كالتالي:

import javax.swing.JRadioButton;

public class MyRadio extends JRadioButton{
    
    private char letter;
    public MyRadio(String label , char letter) {
        super(label);
        this.letter = letter;
    }
    
    public char getLetter(){
        return this.letter;
    }
    
}

وبعد ذلك استخدم هذه الفئة.

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

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

#8

أعتقد أن -alt- يواجه مشكلة معرفة الـ radio الذي تم اختياره،، فهو مثلا عنده الشفرة الطويلة التالية،، لاحظ أنه يريد معرفة (اسم == ْrefference) الـ radio الذي تم اختياره،

public void actionPerfomed(ActionEvent e){
if(e.getSource()==radio1);/////
if(e.getSource()==radio2
..
..
..
وهكذا
#9

في الواقع الأمر ممكن جداً، وببساطة (لكن ليس كثيراً :) !!! )

إن القيام بهذه العملية يتطلب استخدام تقنية الانعكاس RTTI ـ (Runtime Type Identification).

ولكن متى تحتاج إلى استخدام هذه التقنية؟؟

أولاً عندما تكون تريد بناء مترجم عكسي، أو إذا كنت تستخدم صفوف غير موثقة. ولكن الحالة الأكثر توقعاً هي أنك بعد إذا أنشأت صفوفاً ووزعتها لفريق عملك أو كبرامج جاهزة، ولكن لا ترغب بتعديل هذه الصفوف (ربما لضخامة الشيفرة أو لأي سبب آخر). عندها ليس لديك حل سوى RTTI.

وهذا مثال على ذلك. (لم أستخدم RadioButton لأني لا أريد استخدام واجهات حتى لا تضيع الفكرة، ولكن الطريقة واحدة).

public class Test {
  static String s1 = "True";
  static String s2 = "False";
  
  public static void main(String[] args) {
    Test test = new Test();
    try {
    if (test.getClass().getDeclaredFields()[0].getName().equals("s1"))
        System.out.println(test.getClass().getDeclaredField("s1").getName()
            + " = " +
            test.getClass().getDeclaredField("s1").get(null));
    }
    catch (SecurityException ex) {
    }
    catch (NoSuchFieldException ex) {
    }
    catch (IllegalAccessException ex) {
    }
    catch (IllegalArgumentException ex) {
    }
  }
}

أفضل أن تجربوها حتى تروا ماذا سوف يكون الناتج، فهو سوف يشرح ماذا حصل.

الشيفرة بسيطة، فقد استخدمت حقول ساكنة بدلاً من RadioButton. والمهم في الشيفرة كما هو واضح شرط if والسطر التالي.

لا حظوا كيف استطعت معرفة اسم الحقل، ومعرفة قيمته. كما يمكن أيضاً معرفة نمطه وأكثر من ذلك.

راجعوا توثيق Java من أجل المزيد عن تقنية RTTI.

#10

فعلا انت رائع اخي MMSs. معلومة جدا مفيدة؛ ولو انني لم افهم الهدف منها تماما؛ ولكن انت اعطيتنا مفتاح المعلومة.

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

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

#11

ما ذكره الاخ ابو مازن هو الطريقة المثلى لعمل ذلك.

ما كتبه الاخ MMSs يفي بالمطلوب لكن لا ننسى ان استخدام getClass() وما بعده هو جزء من ال reflection الغير منصوح بها في كل اللغات لانها عالية التكلفة و تبطيء النظام.

تم تعديل هذه المشاركة بواسطة madani في 24 أكتوبر 2005 في 15:43

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

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