2012-09-03 12 views
5

एक कार्रवाई में एक बटन के लिए लिस्टर हम फ्लाई पर एक फॉर्म बनाना चाहते हैं।कोडनाम एक गतिशील रूप से बनाया गया फॉर्म, कैसे "पीछे"

जैसे कुछ की तरह

Button b = new Button("Clickme"); 
b.setActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
     Form f = new Form(); 
     Container c = new Container(); 
     ... 
     f.addComponent(c); 
     f.show(); 
    } 
}); 

कौन सा ठीक काम करता है ..... लेकिन "वापस" बटन

किसी को भी एक ActionListener में एक गतिशील रूप को लागू करने का सही तरीका पता है, काम नहीं करेगा या एक पूर्वनिर्धारित रूप के लिए कूद और कार्रवाई श्रोता?

धन्यवाद

जेम्स

उत्तर

3

तुम एक वापस आदेश बना सकते हैं और फार्म के साथ संबद्ध करना:

Command back = new Command("Back") { 
    public void actionPerformed(ActionEvent ev) { 
     // notice that when showing a previous form it is best to use showBack() so the 
     // transition runs in reverse 
     showPreviousForm(); 
    } 
}; 
f.setBackCommand(back); 

आप पानी के नल डेमो जो पूरी तरह से हाथ कोडित है में देख सकते हैं।

+1

हाय शाई, उत्तर के लिए धन्यवाद। बहुत भाग्य नहीं है। मेरे पास एक रूप में एक सूची है। प्रत्येक सूची आइटम में एक बटन होता है, उस बटन में एक एक्शन लिस्टनर होता है जो फ्लाई पर एक फॉर्म उत्पन्न करता है। मैं listrenderer क्लास पर वापस ड्रिल कर सकता हूं, लेकिन उस बिंदु पर getComponentForm() को कॉल करने से एनपीई मिल जाता है ..... इसलिए सुनिश्चित नहीं है कि parentForm.showBack() को सेट करने के लिए पैरेंटफॉर्म कैसे प्राप्त करें। – jamesarbrown

+1

आपको पिछले फॉर्म को फिर से उत्पन्न करने की आवश्यकता है, यह वही है जो हम जीयूआई बिल्डर में करते हैं। वैकल्पिक रूप से आप स्पष्ट स्मृति लागत के प्रभाव के साथ रैम में फॉर्म उदाहरण रख सकते हैं। –

+0

ठीक है, यह नहीं पता था कि जब कोई नया उत्पन्न होता है तो पुराने फॉर्म ऑब्जेक्ट को स्मृति से मुक्त किया जाता है। एक चक्रीय तरीके से पुन: संरचना करने के लिए एक विचार होगा। – jamesarbrown

0

तुम भी तो अपने उदाहरण के लिए पैरामीटर के रूप में रूप दे सकता है

chooseDB(c.getComponentForm()); 

private void chooseDB(final Form main) { 
    Form f = new Form("Choose a Database"); 
    ... 
    Command backCommand = new Command("Back") { 
     public void actionPerformed(ActionEvent ev) { 
      main.showBack(); 
     }}; 
    f.addCommand(backCommand); 
    f.setBackCommand(backCommand); 
    f.show(); 
} 

:

Button b = new Button("Clickme"); 
b.setActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
     Form f = new Form(); 
     Container c = new Container(); 
     Command backCommand = new Command("Settings") { 
     public void actionPerformed(ActionEvent ev) { 
      b.getComponentForm().showBack(); 
     }}; 
    f.addCommand(backCommand); 
    f.setBackCommand(backCommand); 
     f.addComponent(c); 
     f.show(); 
    } 
}); 

शाई, इसे ठीक करें, अगर मैं कुछ भी गलत नहीं किया। धन्यवाद।

संबंधित मुद्दे