كيف يمكنني إعطاء متغير لمستمع العمل؟
-
21-09-2019 - |
سؤال
لدي متغير ثابت 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);
}
}
لا تنتمي إلى StackOverflow