2010-03-16 23 views
7

Uygulamamda sms gönderme ile ilgilenen bir JTextArea nesnesi kullanıyorum.JTextArea sabitinin boyutunu nasıl tutarsınız?

Textarea'da yalnızca 160 karakterin yazılmasına izin verecek şekilde bir DocumentFilter kullandım ama şimdi, textarea'nın boyutunun sabit olmasını istiyorum. Aynı satırda 'enter' tuşuna basmadan yazmaya devam edersem veya sadece tuşlarına basmaya devam etsem bile anahtarını girin. Ben de bir kez 'scrollbar' kullanmayı denedim ama sorun aynı kaldı. Bunun için bana bir şey öner. Aşağıda benim kodum. Lütfen kontrol et.

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 

cevap

5

belirtmek gerekir:

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

Ama asıl sorun 160 karakterden daha fazla girişine sağlamasıdır. Önceden 160 karakter yazıldığı zaman girilen tüm karakterleri atlayacak bir çeşit doğrulayıcı oluşturmalısınız.

10

Ses bunu büyümeye devam böylece metin alanı tercih boyutuna sahip değil bu biçimi kullanırken

JTextArea textArea = new JTextArea(); 

kullanarak metin alanını oluştururken gibi. Eğer kullanıyorsanız:

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

Sonra metin alanı tercih 2 satır boyutu ve (kabaca) 30 sütunlar bulunur. Tercih ettiğiniz genişliği aştığınızda yazarken yatay kaydırma çubuğu belirir. Ya da sarmalamayı açarsanız, metin sarılır ve dikey bir kaydırma çubuğu görünecektir.

-1

PlainDocument uzanır ve insertString yönteminde 160

+0

-1 karakter sınırlamak bir belge ile textarea ilklendirin Bu karakter sadece sayısı metin alanının boyutunun kontrol ile ilgisi vardır can Belge'ye eklenmelidir. Ayrıca, kullanıcı bunu yapmak için bir DocumentFilter yazmıştır, bu da karakter sayısını sınırlamak için tercih edilen yaklaşımdır. – camickr

İlgili konular