我正在处理一个应用程序,我对我的界面有一定的要求:时间输入。
我需要我的控件使用JFormattedTextField接受12小时到24小时的输入,并发现:
MaskFormatter mask = new MaskFormatter("##:##");
mask.setPlaceHolderCharacter('0');
现在我创建了一个扩展到JFormattedTextField
的类 public class JayTimeInput extends JFormattedTextField{....
现在我偷看了JFormattedTextField的源代码,发现了这样的东西:
public JFormattedTextField(Object mask){...
我的问题是:如何创建自动拥有掩码格式化程序的JayTimeInput类?我尝试在我的构造函数中声明它,但我不确定:
public JayTimeInput(){
try{
MaskFormatter mask = new MaskFormatter("##:##");
mask.setPlaceHolderCharacter('0');
new JFormattedTextField(mask);
}catch(Exception e){e.printStackTrace()}
}
我已经看过如何使用MaskFormatter的例子,我发现的唯一方法就是声明它:
MaskFormatter mask = new MaskFormatter("##:##");
mask.setPlaceHolderCharacter('0');
JFormattedTextField jformat = new JFormattedTextField(mask);
我不确定我的actionlistener是否已正确完成,但我需要首先使用它。
有人帮帮我吗?我仍然是通过扩展现有的波动来创建我自己的控件的新手。
更新
我正在查看自定义JFormattedTextField的错误方法。我应该使用FormatFactory。已为任何需要的人发布了答案代码。
答案 0 :(得分:0)
//if you found this usefull, please dont remove this
//and credit my work for this
//James C. Castillo
//zeinzu21@gmail.com
import java.awt.event.KeyEvent;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;
public final class JayTimeInput extends JFormattedTextField{
public JayTimeInput(){
myFormat();
addKeyListener(new java.awt.event.KeyAdapter() {
@Override
public void keyTyped(java.awt.event.KeyEvent evt) {
verify(evt);
}
});
}
public void myFormat() {
try {
MaskFormatter format = new MaskFormatter("##:##");
format.setPlaceholderCharacter('0');
this.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(format));
} catch (java.text.ParseException ex) {
ex.printStackTrace();
}
}
public String getTime(){
return this.getText();
}
public void setTime(String x){
this.setText(x);
}
public void resetTime(){
this.setText("00:00");
}
public void setFocus(boolean f){
this.setFocusable(f);
this.setVerifyInputWhenFocusTarget(f);
}
public void verify(KeyEvent evt){
try {
int carret = this.getCaretPosition();
char c = evt.getKeyChar();
if(carret==0){
int hour = Integer.parseInt(c+"");
if(hour>1){
evt.consume();
}
}
if(carret==1){
int hour = Integer.parseInt(c+"");
if(hour>2){
evt.consume();
}
}
if(carret==3){
int min = Integer.parseInt(c+"");
if(min>5){
evt.consume();
}
}
} catch (Exception e) {
//do nothing. nothing to catch since its keyevent
}
}
}