|
下面是示例代码: |
class JTextFieldFilter extends PlainDocument { public static final String FLOAT = "0123456789."; protected String acceptedChars = null; protected boolean negativeAccepted = false;
public JTextFieldFilter() { this(FLOAT); }
public JTextFieldFilter(String acceptedChars) { this.acceptedChars = acceptedChars; }
/** * 设置是否接受负号 * * @param negativeAccepted * 是否接受负号 */ public void setNegativeAccepted(boolean negativeAccepted) { if (acceptedChars.equals(FLOAT)) { this.negativeAccepted = negativeAccepted; acceptedChars += "-"; } }
public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
// 判断输入的是否为允许的字符 for (int i = 0; i < str.length(); i++) { if (!acceptedChars.contains(str)) { return; } }
// 判断当前输入的是否为".", 如果有了再判断前面有没有输入过 if (acceptedChars.equals(FLOAT) || (acceptedChars.equals(FLOAT + "-") && negativeAccepted)) { if (str.contains(".")) { if (getText(0, getLength()).contains(".")) { return; } } }
// 判断如果支持负数, 那么负号(-)必须在第一位 if (negativeAccepted) { if (str.indexOf("-") != 0 || offset != 0) { return; } }
super.insertString(offset, str, attr); } }
public class Main extends JFrame {
public static void main(String[] argv) throws Exception { new Main(); }
public Main() { setLayout(new FlowLayout()); JLabel lb = new JLabel("only float"); JTextField tf = new JTextField(10); getContentPane().add(lb); getContentPane().add(tf); tf.setDocument(new JTextFieldFilter(JTextFieldFilter.FLOAT)); setSize(300, 300); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
Swing —— 限制JTextArea只能输入浮点数
最新推荐文章于 2018-06-13 15:02:56 发布