JFormattedTextField与AbstractFormatterFactorys配合使用解决文本框模式变化问题 |
JFormattedTextField的setFormatter()方法是被保护的,所以在程序运行时不能改变文本框的输入模式,可以通过继承这个抽象AbstractFormatterFactory类来实现,这个抽象类有一个接口方法:AbstractFormatter getFormatter(JFormattedTextField tf),通过重写这个方法可以在运行时改变文本框的输入模式,当然具体的业务代码就可以写入这个方法体中,通过具体的业务逻辑判断来返回不同的AbstractFormatter 对象。以下是例子代码:
public class DbDlFormatterFactory extends JFormattedTextField.AbstractFormatterFactory {
private MaskFormatter dlMaskFormatter; private MaskFormatter dbMaskFormatter; private MaskFormatter nullMaskFormatter; private String functionCode ; public DbDlFormatterFactory() throws Exception { functionCode = ""; try { dbMaskFormatter = new MaskFormatter("##########.##%"); dlMaskFormatter = new MaskFormatter("##########.##KVh"); nullMaskFormatter = new MaskFormatter("##########.##"); } catch (Exception exp) { throw exp; } } @Override public AbstractFormatter getFormatter(JFormattedTextField tf) { if (tf == null) { return nullMaskFormatter; } if (functionCode.equalsIgnoreCase("L")) { return dlMaskFormatter; } else { if (functionCode.equalsIgnoreCase("B")) { return dbMaskFormatter; } else { return nullMaskFormatter; } } } public void setFunctionCode(String functionCode) { this.functionCode = functionCode; } }
希望对大家有帮助!
|