2011-02-01 19 views
6

पर कुछ प्रतीकों को अक्षम करें JTextField पर अंक को छोड़कर मैं किसी भी प्रतीक के इनपुट को कैसे अक्षम कर सकता हूं?इनपुट को अक्षम करें JTextField

+0

संभव डुप्लिकेट (http://stackoverflow.com/questions/4442004/java-jtextfields) की – jjnguy

+0

संभव डुप्लिकेट [वहाँ किसी भी तरह से एक JTextField में अंकीय मान स्वीकार करने के लिए है?] (http://stackoverflow.com/questions/1313390/is-there-any-way-to-accept-only-numeric-values-in-a-jtextfield) –

+0

ऐसा लगता है कि एक जेएसपीनर * हो सकता है कि उपयोगकर्ता क्या हो वास्तव में यहाँ जरूरत है। –

उत्तर

19

विकल्प 1) एक JFormattedTextField के साथ अपने JTextField बदलने के लिए, इस तरह:

try { 
    MaskFormatter mascara = new MaskFormatter("##.##"); 
    JFormattedTextField textField = new JFormattedTextField(mascara); 
    textField.setValue(new Float("12.34")); 
} catch (Exception e) { 
    ... 
} 

विकल्प कीबोर्ड से 2) उपयोगकर्ता के कब्जा इनपुट, इस तरह:

JTextField textField = new JTextField(10); 
textField.addKeyListener(new KeyAdapter() { 
    public void keyTyped(KeyEvent e) { 
     char c = e.getKeyChar(); 
     if (((c < '0') || (c > '9')) && (c != KeyEvent.VK_BACK_SPACE)) { 
     e.consume(); // ignore event 
     } 
    } 
}); 
2

How to Use Formatted Text Fields

amountField = new JFormattedTextField(NumberFormat.getIntegerInstance()); 

तुम भी अनुकूलित करने के लिए अपने स्वयं के प्रारूप बना सकते हैं।

7

उत्तर JFormattedTextField है। See my answer on this duplicate question:

आप JFormattedTextField का उपयोग कर सकते हैं। इसे NumberFormatter का उपयोग करके बनाएं और यह केवल संख्याओं को स्वीकार करेगा।

JFormattedTextField में कॉन्फ़िगर करने योग्य विकल्पों का एक समूह है जो आपको यह तय करने देता है कि कितना खराब इनपुट प्रबंधित किया जाता है। मैं प्रलेखन को देखने की सलाह देते हैं।

0

आप एक कस्टम KeyListener कि कुंजी स्ट्रोक को बीच में रोक और JTextField को अमान्य की स्ट्रोक का प्रचार नहीं करता है जोड़ सकते हैं।

+0

जब मैं keylisteners का उपयोग करता हूं, तो प्रतीक फ़ील्ड में दिखाई देगा और उसके बाद इसे हटा दिया जाएगा। लेकिन मैं केवल प्रतीक दिखाना चाहता हूं यदि यह अंक संख्या – maks

+0

है यदि आपका श्रोता 'कीइवेन्ट' का उपभोग करता है तो फ़ील्ड कभी इसके बारे में नहीं सुनता है। मैं देखता हूं कि डेकवे ने ऐसा ही एक उदाहरण जोड़ा है। – Qwerky

2

बस सभी वर्ण का उपभोग नहीं है इस तरह का एक अंक:

public static void main(String[] args) { 
    JFrame frame = new JFrame("Test"); 

    frame.add(new JTextField() {{ 
     addKeyListener(new KeyAdapter() { 
      public void keyTyped(KeyEvent e) { 
       if (!Character.isDigit(e.getKeyChar())) 
        e.consume(); 
      } 
     }); 
    }}); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 
+1

वह संभाल नहीं करेगा, उदाहरण के लिए, पेस्ट करें। यह भी निर्भर करता है कि पीएल एंड एफ 'जेटीक्स्टफिल्ड' को कैसे लागू करता है - 'JComboBox' (शायद!) के लिए काम नहीं करेगा। –

+0

अच्छा बिंदु टॉम। मैं इसे संदर्भ के लिए यहां रखूंगा! – dacwe

2

एक बेहतर उपयोगकर्ता के लिए अनुभव

अन्य लोगों ने अमान्य डेटा को दर्ज करने से रोकने के लिए JFormattedTextField या KeyListeners के उपयोग का उल्लेख किया है, लेकिन उपयोगिता बिंदु से मुझे एक फ़ील्ड में टाइप करना शुरू करना बहुत परेशान लगता है और कुछ भी नहीं होता है।

बेहतर उपयोगकर्ता अनुभव प्रदान करने के लिए आप उपयोगकर्ता को फ़ील्ड में गैर-संख्यात्मक मान दर्ज करने की अनुमति दे सकते हैं लेकिन उपयोगकर्ता को प्रतिक्रिया प्रदान करने और सबमिट बटन को अक्षम करने के लिए एक सत्यापनकर्ता का उपयोग कर सकते हैं।

0

यह मेरे लिए काम किया। एक नज़र देख लो।

public void keyTyped(KeyEvent e) 
{ 

    char c = e.getKeyChar(); 

    if (!((c >= '0') && (c <= '9') ||  
    (c == KeyEvent.VK_BACK_SPACE) || 
    (c == KeyEvent.VK_DELETE))) { 

     getToolkit().beep(); 

     e.consume(); 

    } 

} 
[जावा JTextfields] की
संबंधित मुद्दे