2012-12-09 24 views
5

के लिए एक एक्शनलिस्टर मैं बटन के समूह में ActionListener जोड़ना चाहता हूं। क्या कोई कक्षा है जो बटन को लपेटती है? GroupJButtons या कुछ सामान्य रूप से वस्तुओं के समूह की तरह कुछ? इसलिए मैं उन सभी को ActionListener सेट कर सकता हूं। आखिर में मुझे वास्तव में परवाह नहीं है कि कौन से बटन दबाए गए हैं, मैं बस अपना टेक्स्ट बदलना चाहता हूं, इसलिए मुझे इसे JButton पर ले जाना और टेक्स्ट बदलना है।कई JButtons

पूरी प्रक्रिया 1 या 2 में कोड लाइनों को कम करेगी (यदि आप लूप का उपयोग करते हैं) लेकिन मैं ऐसा करना चाहता हूं क्योंकि यह तर्कसंगत रूप से बेहतर लगता है।

+2

यह एक बहुत ही असामान्य जीयूआई है कि कई बटन करना * बिल्कुल * एक ही बात है। उपयोग-मामले क्या है? –

उत्तर

7

कार्रवाई करने के लिए इस मामले में आप AbstractAction वर्ग का विस्तार कर सकते हैं और बस कई बटन के लिए एक ही कार्रवाई लागू ।

class MyAction extends AbstractAction { 
     public MyAction(String text, ImageIcon icon, 
        String desc, Integer mnemonic) { 
     super(text, icon); 
     putValue(SHORT_DESCRIPTION, desc); 
     putValue(MNEMONIC_KEY, mnemonic); 
    } 
    public void actionPerformed(ActionEvent e) { 
     //do the action of the button here 
    } 
    } 

फिर प्रत्येक बटन है कि आप एक ही बात होने की आप कर सकते हैं चाहते हैं के लिए:

Action myAction = new MyAction("button Text", anImage, "Tooltip Text", KeyEvent.VK_A); 
button = new JButton(myAction); 
+0

बहुत अच्छा समाधान! लेकिन क्या यह थोड़ा अधिक नहीं लगता है? बस बटन के एक समूह के लिए? –

+2

@ अरनो: यह मुझे ज्यादा मारने वाला प्रतीत नहीं होता है। अच्छे जवाब के लिए 1+। आप एक MyAction ऑब्जेक्ट बना सकते हैं और कई बटन बनाने के लिए इसका उपयोग कर सकते हैं, यदि सभी बटनों में एक ही टेक्स्ट और एक्शन होगा। अब यदि बटन के अलग-अलग शीर्षक होंगे, तो आपको इसके बजाय एक एक्शनलिस्टर बनाना होगा जिसे कई बटनों में जोड़ा जाता है। –

+0

@ होवरक्राफ्टफुलऑफेल ठीक है, यह जानना अच्छा है! –

4

आप इस का उपयोग प्रत्येक बटन

private JButton createButton(String title, ActionListener al) { 
    JButton button = new JButton(title); 
    button.addActionListener(al); 
    return button; 
} 

बनाने के लिए कर सकते हैं और इस कार्रवाई

public void actionPerformed (ActionEvent ae) { 
    JButton button = (JButton)ae.getSource(); 
    button.setText("Wherever you want"); 
}