2011-08-29 15 views
6

मैं एक कंसोल एप्लिकेशन को स्विंग का उपयोग करने वाले में परिवर्तित कर रहा हूं। फिलहाल मैं चाहता हूं कि मेरा प्रोग्राम इस .nextInt(); पर समान काम करे, मैं इसे .getText(); या कुछ समान उपयोग करके कैसे प्राप्त कर सकता हूं?टेक्स्ट फ़ील्ड में इनपुट के लिए कैसे प्रतीक्षा करें?

संक्षेप में;

जब तक उपयोगकर्ता ने टेक्स्ट फ़ील्ड में कुछ दर्ज नहीं किया है और एंटर दबाया है, तब तक मैं प्रोग्राम के निष्पादन को कैसे रोक सकता हूं।

+0

अभी भी प्रश्न को समझ में नहीं आता है - "निष्पादन रोक" से आपका क्या मतलब है? इसके अलावा: एक मूल स्विंग ट्यूटोरियल और टेक्स्टफील्ड के एपीआई दस्तावेज़ को पढ़ें (संकेत: सेटएक्शन एक लायक हो सकता है :-) – kleopatra

उत्तर

5

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

तो कदम हैं:

  1. एक "धारक" उद्देश्य यह है कि जीयूआई से परिणाम deligates बनाने के लिए "तर्क" धागा
  2. "तर्क" इनपुट के लिए धागा प्रतीक्षा करता है (holder.wait() का प्रयोग करके)
  3. जब उपयोगकर्ता ने टेक्स्ट दर्ज किया है तो यह "धारक" ऑब्जेक्ट को सिंक्रनाइज़ करता है और परिणाम देता है + परिणाम "तर्क" थ्रेड (holder.notify() के साथ)
  4. "लॉजिक" थ्रेड को लॉक से जारी किया जाता है और जारी रहता है।

पूर्ण उदाहरण:

public static void main(String... args) throws Exception { 
    final List<Integer> holder = new LinkedList<Integer>(); 

    final JFrame frame = new JFrame("Test"); 

    final JTextField field = new JTextField("Enter some int + press enter"); 
    frame.add(field); 
    field.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      synchronized (holder) { 
       holder.add(Integer.parseInt(field.getText())); 
       holder.notify(); 
      } 
      frame.dispose(); 
     } 
    }); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 

    // "logic" thread 
    synchronized (holder) { 

     // wait for input from field 
     while (holder.isEmpty()) 
      holder.wait(); 

     int nextInt = holder.remove(0); 
     System.out.println(nextInt); 
     //.... 
    } 
} 
+0

अद्यतन प्रश्न की जांच करें। – Derek

+0

@ डीज़ा: पूर्ण उदाहरण के साथ अपडेट किया गया .. – dacwe

+1

लगभग 6 साल बाद - धन्यवाद !! महान उदाहरण। – DCON

0

कंसोल आवेदन और जीयूआई आवेदन व्यवहार में काफी अलग हैं। कंसोल एप्लिकेशन कमांड लाइन तर्क से इनपुट लेता है या कीबोर्ड से इनपुट इनपुट के लिए प्रतीक्षा करता है जबकि एक कार्य करने के लिए GUI एप्लिकेशन ईवेंट तंत्र द्वारा संचालित होता है।

उदाहरण के लिए, आप अपने फ़्रेम पर टेक्स्टफ़िल्ल्ड ऑब्जेक्ट जोड़ते हैं और अपने टेक्स्ट फ़ील्ड ऑब्जेक्ट में एक KeyListener जोड़ते हैं। जब मुख्य कार्यक्रम बेन को अधिसूचित किया जाता है तो श्रोता को बुलाया जाता है। वहां बहुत सारे उदाहरण हैं, उदा। आधिकारिक जावा उदाहरण http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html

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