سؤال

لدي متغير ثابت partner في الفصل. وأريد تعيين قيمة لهذا المتغير عند الضغط على زر الراديو. هذا هو الرمز الذي حاولت استخدامه:

for (String playerName: players) {
    option = new JRadioButton(playerName, false);
    option.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent evt) {
            partner = playerName;
        }
    });
    partnerSelectionPanel.add(option);
    group.add(option);
}

المشكلة هنا هي أن actionPerformed لا يرى المتغير playerName تم إنشاؤها في الحلقة. كيف يمكنني نقل هذا المتغير إلى ActionListener؟

هل كانت مفيدة؟

المحلول

for (final String playerName: players) {
    option = new JRadioButton(playerName, false);
    option.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent evt) {
            partner = playerName;
        }
    });
    partnerSelectionPanel.add(option);
    group.add(option);
}

يجب أن تكون المتغيرات المحلية التي مرت إلى الفصول الداخلية نهائية. في الأصل اعتقدت أنه لا يمكنك القيام به playerName نهائي في الحلقة ، ولكن في الواقع يمكنك ذلك. إذا لم يكن هذا هو الحال ، فستخزن ببساطة playerName في متغير نهائي إضافي (final String pn = playerName) واستخدمت pn من عند actionPerformed.

نصائح أخرى

يجب أن يكون المتغير نهائي لتمريرها إلى فئة داخلية.

JButton button = new JButton("test");

button.addActionListiner(new ActionForButton("test1","test2"));

class ActionForButton implements ActionListener {

    String arg,arg2;
    ActionFroButton(String a,String b) {
        arg = a; arg2 = b;
    }

        @Override
        public void actionPerformed(ActionEvent e) {
            Sustem.out.println(arg + "--" + arg2);
        }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top