2010-03-16 13 views
7

मैं अपने आवेदन में JTextArea की एक वस्तु का उपयोग कर रहा हूं जो एसएमएस भेजने के साथ संबंधित है।JTextArea निरंतर आकार कैसे रखें?

मैंने एक दस्तावेज़फिल्टर का उपयोग किया है ताकि टेक्स्टरेरा में केवल 160 अक्षरों को टाइप किया जा सके, लेकिन अब, मैं textarea का आकार स्थिर होना चाहता हूं। अगर मैं 'एंटर' कुंजी दबाए बिना एक ही पंक्ति पर लिखना जारी रखता हूं या यहां तक ​​कि जब मैं केवल दबाता हूं तो कुंजी दर्ज करें। मैंने एक बार 'स्क्रॉलबार' का उपयोग करने की कोशिश की लेकिन समस्या एक ही है। मुझे इस पर कुछ सुझाव दें। नीचे मेरा कोड है। कृपया यह जाँचें।

class Send_sms extends JPanel implements ActionListener,DocumentListener  
{  
    JButton send; 
    JTextArea smst; 
    JLabel title,limit; 
    JPanel mainp,titlep,sendp,wrap,titlewrap,blankp1,blankp2,sendwrap; 
    JScrollPane scroll; 
    Border br,blackbr; 
    Boolean flag = false; 
    PlainDocument plane; 
    public static final int LINES = 4; 
    public static final int CHAR_PER_LINE = 40;  
     //character limit 160 for a sms 

    public Send_sms() 
     { 
     br = BorderFactory.createLineBorder(Color.RED); 
     blackbr = BorderFactory.createEtchedBorder(EtchedBorder.RAISED,Color.DARK_GRAY,Color.GRAY); 
     setBorder(blackbr); 

       title = new JLabel("Enter the text you want to send!"); 
     title.setFont(new Font("",Font.BOLD,17)); 
     limit = new JLabel(""+charCount+" Characters"); 
     smst = new JTextArea(LINES,CHAR_PER_LINE); 
     smst.setSize(100,100); 
     plane = (PlainDocument)smst.getDocument(); 
     //adding DocumentSizeFilter 2 keep track of characters entered 
     plane.setDocumentFilter(new DocumentSizeFilter(charCount)); 
     plane.addDocumentListener(this); 
     send = new JButton("Send"); 
     send.setToolTipText("Click Here To Send SMS"); 
     send.addActionListener(this); 

     //scroll = new JScrollPane(smst); 
     //scroll.setPreferredSize(new Dimension(200,200)); 
     //scroll.setVerticalScrollBarPolicy(null); 
     //scroll.setHorizontalScrollBarPolicy(null); 
     smst.setBorder(br); 

     blankp1 = new JPanel(); 
     blankp2 = new JPanel(); 
     titlep = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     titlewrap = new JPanel(new GridLayout(2,1)); 
     mainp = new JPanel(new BorderLayout()); 
     sendwrap = new JPanel(new GridLayout(3,1)); 
     sendp = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     wrap = new JPanel(new BorderLayout()); 

     titlep.add(title); 
     titlewrap.add(titlep); 
     titlewrap.add(blankp1); 

     sendp.add(send); 
     sendwrap.add(limit); 
     sendwrap.add(blankp2); 
     sendwrap.add(sendp); 

     wrap.add(smst,BorderLayout.CENTER); 
     mainp.add(titlewrap,BorderLayout.NORTH); 
     mainp.add(wrap,BorderLayout.CENTER); 
     mainp.add(sendwrap,BorderLayout.SOUTH); 
     add(mainp); 


       } 

    public void actionPerformed(ActionEvent e) 
    { 
     Vector<Vector<String>> info = new Vector<Vector<String>>(); 
     Vector<String> numbers = new Vector<String>(); 
     if(e.getSource() == send) 
     { 
      //Call a function to send he message to all the clients using text 
      //charCount = 165; 
      String msg = smst.getText(); 
      if(msg.length() == 0) 
       JOptionPane.showMessageDialog(null,"Please Enter Message","Error",JOptionPane.ERROR_MESSAGE); 
      else 
      { 
      // System.out.println("Message:"+msg); 

       Viewdata frame = new Viewdata(msg); 

       limit.setText(""+charCount+" Characters"); 
       charCount = 160; 
       } 
     } 
    } 
    public void insertUpdate(DocumentEvent e) 
    { 
     System.out.println("The legth:(insert) "+e.getLength()); 
     for(int i = 0;i<e.getLength(); i++) 
     { 
      if(charCount >0) 
       charCount--; 
      else 
       break; 
     } 
     limit.setText(""+charCount+" Characters"); 

    } 
    public void removeUpdate(DocumentEvent e) 
    { 
     //System.out.println("The legth(remove): "+e.getLength()); 
     for(int i = 0;i<e.getLength(); i++) 
     { 

      charCount++; 

     } 
     limit.setText(""+charCount+" Characters");  
    } 
    public void changedUpdate(DocumentEvent e) 
    { 
     //System.out.println("The legth(change): "+e.getLength()); 

    } 

}//end Send_sms 

उत्तर

5

आप निर्दिष्ट करना होगा:

textArea.setColumns (160); 
textArea.setLineWrap (true); 
textArea.setWrapStyleWord (false); //default 

लेकिन असली समस्या यह है कि आप 160 अक्षरों की तुलना में अधिक इनपुट करने की अनुमति है। आपको किसी प्रकार का सत्यापनकर्ता बनाना होगा जो सभी इनपुट वर्णों को छोड़ देगा जब पहले से ही 160 वर्ण लिखे गए हों। जैसे आप

JTextArea textArea = new JTextArea(); 

का उपयोग कर इस प्रारूप का उपयोग करते समय पाठ क्षेत्र एक पसंदीदा आकार तो यह बढ़ रही है पर रहता नहीं है पाठ क्षेत्र पैदा कर रहे

10

ध्वनि। यदि आप उपयोग करते हैं:

JTextArea textArea = new JTextArea(2, 30); 
JScrollPane scrollPane = new JScrollPane(textArea); 

तब टेक्स्ट क्षेत्र में 2 पंक्तियों और (मोटे तौर पर) 30 कॉलम का पसंदीदा आकार होगा। जैसा कि आप टाइप करते हैं जब आप पसंदीदा चौड़ाई से अधिक हो जाते हैं क्षैतिज स्क्रॉलबार दिखाई देगा। या यदि आप रैपिंग चालू करते हैं, तो पाठ लपेट जाएगा और एक लंबवत स्क्रॉलबार दिखाई देगा।

-1

एक दस्तावेज है कि PlainDocument प्रदान करता है और insertString विधि में 160

+0

-1 वर्ण सीमा के साथ पाठ क्षेत्र Initialise, यह पाठ क्षेत्र के आकार, केवल वर्णों की संख्या को नियंत्रित करने के साथ कोई संबंध नहीं है जो कर सकते हैं दस्तावेज़ में जोड़ा जाना चाहिए। इसके अलावा, उपयोगकर्ता ने ऐसा करने के लिए पहले से ही एक दस्तावेज़फिल्टर लिखा है, जो वर्णों की संख्या को सीमित करने के लिए पसंदीदा दृष्टिकोण है। – camickr

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