2012-10-25 9 views
5

मैं टेक्स्ट की अधिकतम लंबाई को सीमित करने की कोशिश कर रहा हूं जो उपयोगकर्ता किसी टेक्स्टफील्ड में इनपुट कर सकता है लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है।JTextField में इनपुट की सीमित लंबाई काम नहीं कर रही है

text2 = new JTextField("Enter text here",8); 

क्या मैं गलत कर रहा हूँ है:

यहाँ कोड है? मैं सही तरीके से काम करने की सीमा कैसे बना सकता हूं?

उत्तर

9

निर्माता

new JTextField("Enter text here",8); 

8 को दिखाई स्तंभों की संख्या सेट लेकिन अधिक में प्रवेश करने से आप को सीमित नहीं करता।

आप इनपुट लंबाई को प्रतिबंधित करने के लिए DocumentFilter का उपयोग कर सकते हैं।

+1

आप कैसे इस यहाँ करने के लिए पर एक अच्छा उदाहरण मिल सकते हैं (http://www.java2s.com/Tutorial/Java/0240__Swing/LimitJTextFieldinputtoamaximumlength.htm)। – Designpattern

10

आप वर्तमान कोड अधिकतम लंबाई निर्धारित नहीं कर रहे हैं, बल्कि यह दृश्यमान कॉलम की संख्या को परिभाषित कर रहा है।

डेटा की अधिकतम लंबाई को प्रतिबंधित करने के लिए, आप पाठ क्षेत्र के लिए एक कस्टम Document कि अतिरिक्त है कि अधिकतम लंबाई प्रतिबंध को तोड़ने की अनुमति नहीं देता सेट कर सकते हैं:

public final class LengthRestrictedDocument extends PlainDocument { 

    private final int limit; 

    public LengthRestrictedDocument(int limit) { 
    this.limit = limit; 
    } 

    @Override 
    public void insertString(int offs, String str, AttributeSet a) 
     throws BadLocationException { 
    if (str == null) 
     return; 

    if ((getLength() + str.length()) <= limit) { 
     super.insertString(offs, str, a); 
    } 
    } 
} 

तो इस का उपयोग करने के लिए अपने पाठ क्षेत्र सेट दस्तावेज़:

text2.setDocument(new LengthRestrictedDocument(8)); 
0

सीधे शब्दों में JTextField कक्षा का विस्तार करने और निर्माता में KeyReleased घटना को ओवरराइड और एक नई पद्धति है कि लंबाई की जाँच करता है पर यह बात:

+०१२३५१६४१०६
package gui; 

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JTextField; 

public class RecordClassTextField extends JTextField { 

    public RecordClassTextField() { 
     this.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyReleased(KeyEvent e) { 
       cleanText(); 
      } 
     }); 
    } 

    private void cleanText() 
    { 
     if(this.getText().length() > 17){ 
      System.out.println("Over 17"); 
     } 
    } 
} 
0

मुझे यकीन है कि यह आपकी मदद करेगा। मैंने के पर KeyListener को keyTyped जोड़ा है। KeyListener काम करता है जब उपयोगकर्ता if कथन में परिभाषित सीमा से अधिक वर्ण दर्ज करता है।

text2 = new JTextField("Enter text here",8); 
text2.addKeyListener(new KeyAdapter() { 
     public void keyTyped(KeyEvent e) { 
      if (text2.getText().length() == 8) { 
       e.consume(); 
      } 
     } 
    }); 
संबंधित मुद्दे