2010-03-16 21 views
7

Używam obiektu JTextArea w mojej aplikacji, która zajmuje się wysyłaniem sms.Jak utrzymać stałą stałej JTextArea?

Użyłem filtrowania dokumentów, aby umożliwić wpisanie tylko 160 znaków w obszarze tekstu, ale teraz chcę, aby rozmiar obszaru tekstowego był stały. będzie się zwiększał, jeśli będę kontynuował pisanie w tej samej linii bez naciskania klawisza "Enter" lub nawet gdy będę naciskał tylko Wprowadź klucz. Próbowałem też użyć "paska przewijania", ale problem pozostaje ten sam. Zaproponuj mi coś ponad to. Poniżej znajduje się mój kod. Proszę sprawdź to.

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 

Odpowiedz

5

trzeba podać:

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

Ale prawdziwym problemem jest to, że pozwalają na wejście więcej niż 160 znaków. Musisz utworzyć coś w rodzaju walidatora, który pominie wszystkie wprowadzone znaki, gdy zostanie zapisane 160 znaków.

10

brzmieć jak tworzysz pole tekstowe przy użyciu

JTextArea textArea = new JTextArea(); 

Używając tego formatu obszar tekstu nie posiada preferowany rozmiar, dlatego ciągle rośnie. Jeśli użyjesz:

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

Następnie pole tekstowe będzie miało preferowany rozmiar 2 wierszy i (z grubsza) 30 kolumn. Podczas pisania po przekroczeniu preferowanej szerokości pojawi się poziomy pasek przewijania. Jeśli włączysz zawijanie, tekst zostanie zawinięty i pojawi się pionowy pasek przewijania.

-1

Initialise textarea z dokumentu, który rozciąga PlainDocument iw sposobie insertString ograniczenia do 160 znaków

+0

-1, to nie ma nic wspólnego z kontrolując wielkość obszaru tekstu, tylko liczbę znaków, które można zostać dodane do dokumentu. Ponadto użytkownik już napisał do tego DocumentFilter, który jest preferowanym sposobem ograniczenia liczby znaków. – camickr