Comment faire Pour Conserver la Taille De JTextArea constante?
Je suis en utilisant un objet de JTextArea dans mon application qui traite avec l'envoi de sms.
J'ai utilisé un DocumentFilter afin de permettre seulement 160 caractères tapés dans le textarea, mais maintenant, je veux que la taille de la textarea être constante. il va croissant si je continue à écrire sur la même ligne sans appuyer sur la touche "enter" ou même quand je suis sur le simple fait d'appuyer sur Entrée. J'ai essayé une fois à l'aide de la "barre de défilement" trop, mais le problème reste le même. Me suggérer quelque chose au cours de cette. Ci-dessous mon code. S'il vous plaît vérifier.
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
OriginalL'auteur Supereme | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
Sonnent comme de la création de la zone de texte à l'aide de
Lors de l'utilisation de ce format de la zone de texte n'a pas une taille préférée de sorte qu'il continue à grandir. Si vous utilisez:
Puis la zone de texte aura une taille par défaut de 2 lignes et de (environ) 30 colonnes. Dès que vous saisissez lorsque vous dépassez la largeur préférée de la barre de défilement horizontale apparaît. Ou si vous tournez sur l'emballage, puis le texte est renvoyé à la ligne et une barre de défilement verticale apparaîtra.
OriginalL'auteur camickr
vous devez spécifier:
Mais le vrai problème, c'est que vous permettez d'entrée de plus de 160 caractères. Vous avez besoin de créer un certain type de programme de validation qui va ignorer tous les caractères insérés lorsqu'il existe déjà des 160 caractères écrits.
OriginalL'auteur Roman
Initialiser le textArea avec un document qui s'étend PlainDocument et dans le insertString méthode de limiter les caractères à 160
OriginalL'auteur Kannan Ekanath