अज्ञात प्रकार के घटकों पर कार्यों के लिए GetSource का उपयोग करना

मैं एक विशिष्ट क्रम में क्लिक किए गए विशिष्ट घटकों को ट्रैक करना चाहता हूं।

मैं GetSource और इस तरह झंडे का उपयोग कर रहा हूँ:

public void actionPerformed(ActionEvent e) {

JButton q = (JButton)e.getSource();
JRadioButton w = (JRadioButton)e.getSource();

    if (q.equals(mybutton)) {
        if (flag == false) {
            System.out.print("test");
            flag = true;
        }
    }

यह जेबट्टन के लिए पूरी तरह से काम करता है, समस्या यह भी JRadioButtons के लिए उपयोग कर रही है। यदि मैं उन दोनों पर GetSource का उपयोग करता हूं, तो एक बटन क्लिक करें और इसके परिणामस्वरूप एक कास्ट अपवाद त्रुटि होगी क्योंकि बटन को रेडियोबूटन में नहीं डाला जा सकता है।

मैं इस समस्या को कैसे हल करूं?

0
जोड़ा
विचारों: 1

1 उत्तर

संदर्भों की तुलना करने के लिए आप == का उपयोग कर सकते हैं क्योंकि संदर्भ बदल नहीं पाएंगे।

if(e.getSource() == radBtn1){
//do something
}  

मैंने अतीत में इसका इस्तेमाल किया है और यह मेरे लिए एक आकर्षण की तरह काम करता है।

क्लास कास्ट इश्यू के लिए, आपको ईवेंट के स्रोत का कौन सा वर्ग संबंधित है, यह देखने के लिए आपको exampleof का उपयोग करने की आवश्यकता है। यदि कारण JButton था और आप इसे JRadioButton पर अंधा कर देते हैं, तो इसका परिणाम अपवाद होगा। आपको इसकी आवश्यकता है:

Object source = e.getSource();
if (source instanceof JButton){
  JButton btn = (JButton) source;
} else if (source instanceof JRadioButton){
  JRadioButton btn = (JRadioButton) source;
}
0
जोड़ा
@ user2079483 जहां आप अपना JRadio बटन घोषित करते हैं, बस इसे null पर प्रारंभ करें। फिर, इसे एक मूल्य देने के लिए कहीं भी कन्स्ट्रक्टर का उपयोग करें।
जोड़ा लेखक Little Child, स्रोत
जवाब के लिए धन्यवाद। मैंने उदाहरण का उपयोग करने का प्रयास किया है, लेकिन मुझे त्रुटि मिलती है "अगर कथन से" चर [जेबटन/जेराडियोबूटन] प्रारंभ नहीं किया गया हो "।
जोड़ा लेखक user2079483, स्रोत