Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Text Field Max Characters

Reply
Thread Tools

Text Field Max Characters

 
 
bruce
Guest
Posts: n/a
 
      10-10-2010
Is there any way to set the maximum number of characters a text field
can accept? I used setColumns() and then I used validate(). Didn't
seem to have any effect.

The only other idea I had was to capture the keystrokes and then test
the input for the string length I want to limit the field to. In my
case, that would be overkill!!!!

Thanks..

Bruce
 
Reply With Quote
 
 
 
 
John B. Matthews
Guest
Posts: n/a
 
      10-10-2010
In article
<683f43c0-6f81-423c-aa7d->,
bruce <> wrote:

> Is there any way to set the maximum number of characters a text field
> can accept? I used setColumns() and then I used validate(). Didn't
> seem to have any effect.


These would affect the field's view; you want to limit the number of
characters permitted in the field's model.

> The only other idea I had was to capture the keystrokes and then test
> the input for the string length I want to limit the field to. In my
> case, that would be overkill!!!!


It seems straightforward; here's an <http://sscce.org/>:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/** @author John B. Matthews */
public class ShortDocumentTest extends JPanel {

private static final int MAX = 8;

public ShortDocumentTest() {
this.add(new JTextField(new ShortDocument(), "12345678", MAX));
}

private static final class ShortDocument extends PlainDocument {

@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (this.getLength() + str.length() <= MAX) {
super.insertString(offs, str, a);
}
}
}

private void display() {
JFrame f = new JFrame("ShortDocumentTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new ShortDocumentTest().display();
}
});
}
}
 
Reply With Quote
 
 
 
 
bruce
Guest
Posts: n/a
 
      10-11-2010
On Oct 9, 11:29*pm, "John B. Matthews" <nos...@nospam.invalid> wrote:
> In article
> <683f43c0-6f81-423c-aa7d-99d39c81d...@n16g2000vbg.googlegroups.com>,
>
> *bruce <bruc...@bellsouth.net> wrote:
> > Is there any way to set the maximum number of characters a text field
> > can accept? *I used setColumns() and then I used validate(). Didn't
> > seem to have any effect.

>
> These would affect the field's view; you want to limit the number of
> characters permitted in the field's model.
>
> > The only other idea I had was to capture the keystrokes and then test
> > the input for the string length I want to limit the field to. *In my
> > case, that would be overkill!!!!

>
> It seems straightforward; here's an <http://sscce.org/>:
>
> import java.awt.EventQueue;
> import javax.swing.JFrame;
> import javax.swing.JPanel;
> import javax.swing.JTextField;
> import javax.swing.text.AttributeSet;
> import javax.swing.text.BadLocationException;
> import javax.swing.text.PlainDocument;
>
> /** @author John B. Matthews */
> public class ShortDocumentTest extends JPanel {
>
> * * private static final int MAX = 8;
>
> * * public ShortDocumentTest() {
> * * * * this.add(new JTextField(new ShortDocument(), "12345678", MAX));
> * * }
>
> * * private static final class ShortDocument extends PlainDocument {
>
> * * * * @Override
> * * * * public void insertString(int offs, String str, AttributeSet a)
> * * * * * * * * throws BadLocationException {
> * * * * * * if (this.getLength() + str.length() <= MAX) {
> * * * * * * * * super.insertString(offs, str, a);
> * * * * * * }
> * * * * }
> * * }
>
> * * private void display() {
> * * * * JFrame f = new JFrame("ShortDocumentTest");
> * * * * f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> * * * * f.add(this);
> * * * * f.pack();
> * * * * f.setLocationRelativeTo(null);
> * * * * f.setVisible(true);
> * * }
>
> * * public static void main(String[] args) {
> * * * * EventQueue.invokeLater(new Runnable() {
>
> * * * * * * @Override
> * * * * * * public void run() {
> * * * * * * * * new ShortDocumentTest().display();
> * * * * * * }
> * * * * });
> * * }
>
> }
>
>


Thanks for the suggestion. I "Sort Of" understand what you have done.
I'm going to try to convert it to my specific case. I think the meat
of your example is in the "insertString" which I will need to convert
to a keystroke, I think. This is one place my "newbie" is showing up..
I'll play around with it.

Thanks again for the response...

Bruce
 
Reply With Quote
 
markspace
Guest
Posts: n/a
 
      10-11-2010
On 10/11/2010 11:13 AM, bruce wrote:

> Thanks for the suggestion. I "Sort Of" understand what you have done.



What John did is pretty simple. He just used the .setDocument() method
of a JTextField to set its underlying document to one that will only
allow x characters.

One thing to be careful of when you're doing "key presses" is that I
don't think Java passes all calls to the document .insert() method
through some sort of key press filter.

What if the key press is "Cntl-V" for example, where one key press might
insert quite a lot of text? What if there is no key press at all, e.g.
some one selects "Paste" from a menu?

You might want to show us a bit more realistic example of what you are
trying to do, I don't think your approach right now is guaranteed to work.


 
Reply With Quote
 
John B. Matthews
Guest
Posts: n/a
 
      10-12-2010
In article <i8vrav$na3$>,
markspace <> wrote:

> On 10/11/2010 11:13 AM, bruce wrote:
>
> > Thanks for the suggestion. I "Sort Of" understand what you have done.

>
> What John did is pretty simple. He just used the .setDocument()
> method of a JTextField to set its underlying document to one that
> will only allow x characters.


Exactly; supernumerary characters never get into the Document at all.

> One thing to be careful of when you're doing "key presses" is that I
> don't think Java passes all calls to the document .insert() method
> through some sort of key press filter.
>
> What if the key press is "Cntl-V" for example, where one key press
> might insert quite a lot of text? What if there is no key press at
> all, e.g. some one selects "Paste" from a menu?


Although it's orthogonal to extending the Document, one can also
intercept Document events in a DocumentListener:

<http://download.oracle.com/javase/tutorial/uiswing/events/documentlistener.html>

As an aside, I just noticed the malapropism, "DocumentListers":

<http://download.oracle.com/javase/6/docs/api/javax/swing/text/Document.html#insertString(int,%20java.lang.String ,%20javax.swing.text.AttributeSet)>

> You might want to show us a bit more realistic example of what you are
> trying to do, I don't think your approach right now is guaranteed to work.


--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
 
Reply With Quote
 
Wojtek
Guest
Posts: n/a
 
      10-13-2010
markspace wrote :
> On 10/11/2010 11:13 AM, bruce wrote:
>
>> Thanks for the suggestion. I "Sort Of" understand what you have done.

>
>
> What John did is pretty simple. He just used the .setDocument() method of a
> JTextField to set its underlying document to one that will only allow x
> characters.
>
> One thing to be careful of when you're doing "key presses" is that I don't
> think Java passes all calls to the document .insert() method through some
> sort of key press filter.
>
> What if the key press is "Cntl-V" for example, where one key press might
> insert quite a lot of text? What if there is no key press at all, e.g. some
> one selects "Paste" from a menu?
>
> You might want to show us a bit more realistic example of what you are trying
> to do, I don't think your approach right now is guaranteed to work.


And you have to watch special operations such as "Delete" and
"Backspace". If your character count is full, you still need to allow
certain characters through.

--
Wojtek


 
Reply With Quote
 
Stanimir Stamenkov
Guest
Posts: n/a
 
      10-13-2010
Sat, 9 Oct 2010 18:51:05 -0700 (PDT), /bruce/:

> Is there any way to set the maximum number of characters a text field
> can accept? I used setColumns() and then I used validate(). Didn't
> seem to have any effect.
>
> The only other idea I had was to capture the keystrokes and then test
> the input for the string length I want to limit the field to. In my
> case, that would be overkill!!!!


You may also look at javax.swing.text.DocumentFilter:

http://download.oracle.com/javase/6/...entFilter.html

http://download.oracle.com/javase/tu...xt.html#filter

--
Stanimir
 
Reply With Quote
 
bruce
Guest
Posts: n/a
 
      10-14-2010
On Oct 13, 5:19*pm, Stanimir Stamenkov <s7a...@netscape.net> wrote:
> Sat, 9 Oct 2010 18:51:05 -0700 (PDT), /bruce/:
>
> > Is there any way to set the maximum number of characters a text field
> > can accept? *I used setColumns() and then I used validate(). Didn't
> > seem to have any effect.

>
> > The only other idea I had was to capture the keystrokes and then test
> > the input for the string length I want to limit the field to. *In my
> > case, that would be overkill!!!!

>
> You may also look at javax.swing.text.DocumentFilter:
>
> http://download.oracle.com/javase/6/...g/text/Documen...
>
> http://download.oracle.com/javase/tu...onents/general...
>
> --
> Stanimir


Thanks for the response.

Bruce
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
javascript validation for a not required field, field is onlyrequired if another field has a value jr Javascript 3 07-08-2010 10:33 AM
How can I get Max Lenght of a Text Field Darin Duphorn Ruby 2 02-02-2008 06:44 AM
1.Enter space bar for field names and save the field.The field shoud not get saved and an alert should be there as"Space bars are not allowed" Sound Javascript 2 09-28-2006 02:43 PM
Textarea max rows and max characters per row Greg Ferris Javascript 2 01-16-2004 07:21 PM
Max Apperture and Max. Shutter Speed Confusion-HELP bhaskar Digital Photography 12 07-22-2003 05:17 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57