2010-04-12 9 views
5

मैं JDialog बढ़ाया एक कस्टम संवाद बनाने के लिए में प्रवेश किया इनपुट को पुनः प्राप्त जहाँ उपयोगकर्ता कुछ क्षेत्रों भरना होगा: dialog http://www.freeimagehosting.net/uploads/3d4c15ed9a.jpgएक JDialog

डेटा मैं कैसे पुनः प्राप्त करना चाहिए प्रवेश किया?

मैं एक समाधान के साथ आया जो काम करता है। यह JOptionPane की नकल करता लेकिन जिस तरह से मैं क्या यह मेरे लिए स्थिर शामिल क्षेत्रों की वजह से बदसूरत लग रहा है ... यहाँ मोटे तौर पर मेरी कोड है:

public class FObjectDialog extends JDialog implements ActionListener { 
    private static String name; 
    private static String text; 
    private JTextField fName; 
    private JTextArea fText; 
    private JButton bAdd; 
    private JButton bCancel; 

    private FObjectDialog(Frame parentFrame) { 
     super(parentFrame,"Add an object",true); 
     // build the whole dialog 
     buildNewObjectDialog(); 
     setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     if(ae.getSource()==bAdd){ 
      name=fName.getText(); 
      text=fText.getText(); 
     } 
     else { 
      name=null; 
      text=null; 
     } 
     setVisible(false); 
     dispose(); 
    } 

    public static String[] showCreateDialog(Frame parentFrame){ 
     new FObjectDialog(parentFrame); 
     String[] res={name,text}; 
     if((name==null)||(text==null)) 
      res=null; 
     return res; 
    } 
} 

जैसा कि मैंने कहा, कि ठीक से काम करता है, लेकिन मुझे लगता है कि है कि गंभीर बढ़ाई जा सकती है समवर्ती मुद्दों ...

क्या ऐसा करने का कोई क्लीनर तरीका है? यह जॉप्शनपेन में कैसे किया जाता है?

+0

आप किस रूप में दिखते हैं और महसूस करते हैं? –

+1

@ मार्टिजन कोर्टटेक्स: निम्बस (http://stackoverflow.com/questions/2616448/im-tired-of-jbuttons-how-can-i-make-a-nicer-gui-in-java) ;-) –

उत्तर

10

मैं ऐसा करते हैं, मैं हमेशा इस तरह काम करता है:

FObjectDialog fod = new FObjectDialog(this); 
fod.setLocationRelativeTo(this); // A model doesn't set its location automatically relative to its parent 
fod.setVisible(true); 
// Now this code doesn't continue until the dialog is closed again. 
// So the next code will be executed when it is closed and the data is filled in. 
String name = fod.getName(); 
String text = fod.getText(); 
// getName() and getText() are just two simple getters (you still have to make) for the two fields their content 
// So return textField.getText(); 

आशा इस मदद करता है!
पीएस: आपका कार्यक्रम बहुत अच्छा लग रहा है!

+0

Ooooooooh बेशक ! मुझे नहीं पता कि मैं उन स्थिर क्षेत्रों के साथ क्यों फंस गया ... मेरे दिमाग में खिड़की का निपटान करने के बाद वस्तु नष्ट हो गई थी, लेकिन वास्तव में यह नहीं है। धन्यवाद ! –

1

यदि आप एक ही समय में कई संवाद प्रदर्शित करना चाहते हैं, तो आपके पास समवर्ती समस्याएं हैं, अन्यथा नहीं। हालांकि, सभी स्थैतिक सामानों से छुटकारा पाने से डिज़ाइन क्लीनर, सुरक्षित और परीक्षण करने में आसान हो जाएगा। बस कॉलिंग कोड से संवाद के निर्माण और प्रदर्शन को नियंत्रित करें और आपको किसी भी स्थिर सामग्री की आवश्यकता नहीं है।