दिलचस्प पोस्ट
ASP.NET MVC के लिए प्लग-इन आर्किटेक्चर छवि उदाहरण के साथ SpannableString Php में महीने का अंतर ढूंढें? क्यों सी # डिफ़ॉल्ट रूप से गैर-वर्चुअल रूप से लागू करता है? सी से कार्य चलें क्या एंड्रॉइड ड्रॉएबल डायरेक्टरी में उपनिर्देशिकाएं हो सकती हैं? सी ++ प्रीप्रोसेसर __VA_ARGS__ तर्कों की संख्या पायथन: ओएस क्या चल रहा है? अपवाद प्राप्त करना: 'स्प्रिंग सिक्योरिटी फ़िल्टरैन' नाम का कोई बीन परिभाषित नहीं किया गया है Windows में प्रति जावा प्रक्रिया की अधिकतम मात्रा मेमोरी? jquery सभी फार्म तत्वों प्राप्त: इनपुट, textarea और चयन करें मैं सी # में कार्य प्रबंधक में एक प्रक्रिया कैसे छुपाऊँ? डेटाबेस के साथ जेटीबल में डेटा कैसे भरें? एक ज़िप फ़ाइल बनाने के लिए सिस्टम। आईओ। पैकेजिंग का उपयोग करना ग्रहण "त्रुटि: मुख्य वर्ग को ढूँढ या लोड नहीं किया जा सका"

JTextField में केवल अंकों की शुरुआत करने की अनुमति देने के लिए कैसे?

संभव डुप्लिकेट:
जावा में (JTextField क्लास) कैसे कार्यान्वित करने के लिए केवल अंक दर्ज करने के लिए?

मैंने यहाँ दिखाया गया उदाहरण का उपयोग करने की कोशिश की है लेकिन जावा "AttributeSet का त्रुटि संदेश दिखा रहा है जो एक प्रकार से हल नहीं किया जा सकता" यही कारण है कि मैं केवल अंकों की अनुमति देने के अन्य तरीके का उपयोग करने की कोशिश कर रहा हूं:

txtUsername.addKeyListener(new MyKeyListener()); public class MyKeyListener extends KeyAdapter{ public void keyPressed(KeyEvent ke){ System.out.println("Key pressed code = "+ke.getKeyCode()); if (ke.getKeyCode()>=48 && ke.getKeyCode()<=57) return true; else return false; } } 

लेकिन निश्चित रूप से यह काम नहीं कर रहा है क्योंकि keyPressed विधि void । तो, टेक्स्टफील्ड में केवल अंक प्रिंट करने के लिए क्या करना है?

धन्यवाद।

Solutions Collecting From Web of "JTextField में केवल अंकों की शुरुआत करने की अनुमति देने के लिए कैसे?"

यहां इस कोड स्निपेट की जांच करें, इस तरह से आप जितनी अधिक प्रभावी तरीके के रूप में दस्तावेज़फ़िल्टर का उपयोग करके, केवल JTextField में अंक की अनुमति देते हैं:

 import java.awt.*; import javax.swing.*; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.DocumentFilter; import javax.swing.text.DocumentFilter.FilterBypass; public class InputInteger { private JTextField tField; private MyDocumentFilter documentFilter; private void displayGUI() { JFrame frame = new JFrame("Input Integer Example"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JPanel contentPane = new JPanel(); contentPane.setBorder( BorderFactory.createEmptyBorder(5, 5, 5, 5)); tField = new JTextField(10); ((AbstractDocument)tField.getDocument()).setDocumentFilter( new MyDocumentFilter()); contentPane.add(tField); frame.setContentPane(contentPane); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { new InputInteger().displayGUI(); } }; EventQueue.invokeLater(runnable); } } class MyDocumentFilter extends DocumentFilter { @Override public void insertString(DocumentFilter.FilterBypass fp , int offset, String string, AttributeSet aset) throws BadLocationException { int len = string.length(); boolean isValidInteger = true; for (int i = 0; i < len; i++) { if (!Character.isDigit(string.charAt(i))) { isValidInteger = false; break; } } if (isValidInteger) super.insertString(fp, offset, string, aset); else Toolkit.getDefaultToolkit().beep(); } @Override public void replace(DocumentFilter.FilterBypass fp, int offset , int length, String string, AttributeSet aset) throws BadLocationException { int len = string.length(); boolean isValidInteger = true; for (int i = 0; i < len; i++) { if (!Character.isDigit(string.charAt(i))) { isValidInteger = false; break; } } if (isValidInteger) super.replace(fp, offset, length, string, aset); else Toolkit.getDefaultToolkit().beep(); } } 

या कोई भी इस दृष्टिकोण का उपयोग कर सकता है, जैसा कि @ कैरोलस हेबर्डर द्वारा दिया गया है

 @Override public void insertString(FilterBypass fb, int off , String str, AttributeSet attr) throws BadLocationException { // remove non-digits fb.insertString(off, str.replaceAll("\\D++", ""), attr); } @Override public void replace(FilterBypass fb, int off , int len, String str, AttributeSet attr) throws BadLocationException { // remove non-digits fb.replace(off, len, str.replaceAll("\\D++", ""), attr); } 

मैं एक JFormattedTextField का उपयोग करने का सुझाव देता हूं, यहां बताया गया है कि: कैसे स्वरूपित पाठ फ़ील्ड का उपयोग करें I

इसे इस्तेमाल करे:

 public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs)throws BadLocationException { if(fb.getDocument().getLength() + text.length() > 10) { return; } fb.insertString(offset, text, attrs); } 

के बजाय:

 public void replace(DocumentFilter.FilterBypass fp, int offset , int length, String string, AttributeSet aset) throws BadLocationException { int len = string.length(); boolean isValidInteger = true; for (int i = 0; i < len; i++) { if (!Character.isDigit(string.charAt(i))) { isValidInteger = false; break; } } if (isValidInteger) super.replace(fp, offset, length, string, aset); else Toolkit.getDefaultToolkit().beep(); } 

गैर-नंबरों का उपभोग करने के लिए मैं यही उपयोग करता हूं

 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(); // consume non-numbers } } });