Применяется специальный фильтр JTextField 6 Март 2009 by admin·0 Comments Следующий класс поможет JTextField фильтровать цифровой или буквенно-цифровые символы. import javax.swing.text.*; public class JTextFieldFilter extends PlainDocument { public static final String LOWERCASE = "abcdefghijklmnopqrstuvwxyz"; public static final String UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String ALPHA = LOWERCASE + UPPERCASE; public static final String NUMERIC = "0123456789"; public static final String FLOAT = NUMERIC + "."; public static final String ALPHA_NUMERIC = ALPHA + NUMERIC; protected String acceptedChars = null; protected boolean negativeAccepted = false; public JTextFieldFilter() { this(ALPHA_NUMERIC); } public JTextFieldFilter(String acceptedchars) { acceptedChars = acceptedchars; } public void setNegativeAccepted(boolean negativeaccepted) { if (acceptedChars.equals(NUMERIC) || acceptedChars.equals(FLOAT) || acceptedChars.equals(ALPHA_NUMERIC)){ negativeAccepted = negativeaccepted; acceptedChars += "-"; } } public void insertString (int offset, String str, AttributeSet attr) throws BadLocationException { if (str == null) return; if (acceptedChars.equals(UPPERCASE)) str = str.toUpperCase(); else if (acceptedChars.equals(LOWERCASE)) str = str.toLowerCase(); for (int i=0; i < str.length(); i++) { if (acceptedChars.indexOf(str.valueOf(str.charAt(i))) == -1) return; } if (acceptedChars.equals(FLOAT) || (acceptedChars.equals(FLOAT + "-") && negativeAccepted)) { if (str.indexOf(".") != -1) { if (getText(0, getLength()).indexOf(".") != -1) { return; } } } if (negativeAccepted && str.indexOf("-") != -1) { if (str.indexOf("-") != 0 || offset != 0 ) { return; } } super.insertString(offset, str, attr); } } import java.awt.*; import javax.swing.*; public class tswing extends JApplet{ JTextField tf1,tf1b,tf1c,tf2,tf3; JLabel l1,l1b,l1c,l2,l3; public void init() { getContentPane().setLayout(new FlowLayout()); // l1 = new JLabel("only numerics"); tf1 = new JTextField(10); getContentPane().add(l1); getContentPane().add(tf1); tf1.setDocument (new JTextFieldFilter(JTextFieldFilter.NUMERIC)); // l1b = new JLabel("only float"); tf1b = new JTextField(10); getContentPane().add(l1b); getContentPane().add(tf1b); tf1b.setDocument (new JTextFieldFilter(JTextFieldFilter.FLOAT)); // l1c = new JLabel("only float(can be negative)"); tf1c = new JTextField(10); getContentPane().add(l1c); getContentPane().add(tf1c); JTextFieldFilter jtff = new JTextFieldFilter(JTextFieldFilter.FLOAT); jtff.setNegativeAccepted(true); tf1c.setDocument(jtff); // l2 = new JLabel("only uppercase"); tf2 = new JTextField(10); getContentPane().add(l2); getContentPane().add(tf2); tf2.setDocument (new JTextFieldFilter(JTextFieldFilter.UPPERCASE)); // l3 = new JLabel("only 'abc123%$'"); tf3 = new JTextField(10); getContentPane().add(l3); getContentPane().add(tf3); tf3.setDocument (new JTextFieldFilter("abc123%$")); } } other