随笔 - 18  文章 - 96  trackbacks - 0
<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


常用链接

留言簿(4)

随笔档案

相册

我的兄弟们

搜索

  •  

最新评论

阅读排行榜

评论排行榜

在网上Google了一下,基本上的做法有两种,第一种是JFormattedTextField;另外一种是自己继承PlainDocument, Override insertString方法,然后用JTextFiled.setDocument的方法放入自己继承的对象实例。但是最终我都没有采用这两种方法,首 先我对JFormattedTextField的方式不太舒服,然后感觉继承PlainDocument有点太重,所以自己考虑了一种方案,也许有人跟我 的想法雷同,那就纯属巧合了。

下面放上代码:
public class MyJTextField extends JTextField {
    
private int limit = Integer.MAX_VALUE;
    
private boolean numberOnly;

    
public MyJTextField() {
        addKeyListener(
new KeyAdapter() {
            @Override
            
public void keyTyped(KeyEvent e) {
                
if (getText().length() + 1 > limit) {
                    deleteInputChar(e);
                    
return;
                }
                
if (numberOnly) {
                    
char input = e.getKeyChar();
                    
if (!Character.isDigit(input)) {
                        deleteInputChar(e);
                    }
                }
            }

            
private void deleteInputChar(KeyEvent source) {
                source.setKeyChar((
char) KeyEvent.VK_CLEAR);
            }
        });

    }

    
public void setMaxTextLength(int limit) {
        
if (limit < 0) {
            
return;
        }
        
this.limit = limit;
    }

    
public int getMaxTextLength() {
        
return limit;
    }

    
public void setNumberOnly(boolean numberOnly) {
        
this.numberOnly = numberOnly;
    }

    
public boolean isNumberOnly() {
        
return this.numberOnly;
    }
}

整个思路很简单,就是检查Type事件,如果超出了限制就删除新增加的字符,如果设置了只是数字,那么不是数字的就删除新增加的字符。使用的时候只需要
MyJTextField textField = new MyJTextField();
textField.setLimit(8);
textField.setNumberOnly(true);
结果就是最多输入8个字符而且只能是数字。

posted on 2007-09-09 00:41 ruislan 阅读(1276) 评论(2)  编辑  收藏

FeedBack:
# re: 限制JTextFiled只能输入定长或者数字 2007-09-09 06:55 sitinspring
把限制输入文字部分和字符位数抽象出来,让它们可以在外头设定,MyJTextField也许能更通用一些
比如:
MyJTextField textField1 = new MyJTextField(MyJTextField.Letter,8);
....

MyJTextField textField2 = new MyJTextField(MyJTextField.Number,10);
....
MyJTextField textField2 = new MyJTextField(MyJTextField.Letter+MyJTextField.Number,12);

  回复  更多评论
  
# re: 限制JTextFiled只能输入定长或者数字 2007-09-09 10:36 ruislan
Thanks,是个很好的建议。呵呵,这样是不是有点像SWT的Style了。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: