2009-06-10 89 views
4

我有IP地址的格式文本字段:如何使用佔位符字符設置JFormattedTextField的值?

ipmask = new MaskFormatter("###.###.###.###"); 
ipmask.setPlaceholderCharacter(' '); 
field = new JFormattedTextField(ipmask); 

field.setValue("111.222.333.444");的作品,但

field.setValue(" 10.222.333.444");不起作用

field.setValue("10 .222.333.444");不起作用

field.setValue("10.222.333.444");不起作用

什麼是設置val的正確方法UE?

+0

顯然,佔位符只能在結束時使用

使用GUI生成器生成的該代碼的字符串。我無法找到解決方法,我正在刪除我的不正確答案。 – 2009-06-10 17:34:46

回答

1

空格不計爲數字(#)和。算作任何事情。不幸的是,你將無法匹配MaskFormatter的IP地址,除非你能找到一種方法來爲1個JFormattedTextField設置多個MaskFormatters。

簡單

if (field.getValue().matches("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}")) //do something 

編輯:你必須使用一個普通的JTextField並驗證它

+0

我知道我可以編寫自己的類來做到這一點,但是在java類中構建它會更好。 – 5YrsLaterDBA 2009-06-11 15:21:47

5

相當奇怪,但另一個問題這次來到拉(Java: network settings window)。經過周圍挖原來有從Sun RegexFormatter實現(見http://java.sun.com/products/jfc/tsc/articles/reftf/;在http://java.sun.com/products/jfc/tsc/articles/reftf/RegexFormatter.java下載源代碼),你可以使用這樣的:

JFormattedTextField ipAddress; 
    try{ 
    RegexFormatter ipmask = new RegexFormatter("\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}\\.\\d{0,3}"); 
     ipmask.setOverwriteMode(false); 
    ipAddress = new JFormattedTextField(ipmask); 
}catch(Exception e1){ 
} 
ipAddress.setValue("255.255.255.255"); 

你可能從這裏移動了,但想到我d堅持這一點,以防其他人徘徊。

0

我試過使用掩碼格式化程序,但它不適合我們的情況,所以我想出了使用正則表達式和即時驗證用戶輸入的方法。

jFormattedTextField2 = new javax.swing.JFormattedTextField(); 
jFormattedTextField2.setHorizontalAlignment(jFormattedTextField2.CENTER); 
jFormattedTextField2.addCaretListener(new javax.swing.event.CaretListener() { 
    public void caretUpdate(javax.swing.event.CaretEvent evt) { 
     jFormattedTextField2CaretUpdate(evt); 
    } 
}); 

這裏每個字段更新的輸入將使用匹配器進行驗證:

private void jFormattedTextField2CaretUpdate(javax.swing.event.CaretEvent evt) {             
     // validation happen here and the text is red if IP is invalid 
     final String regex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; 
     final Pattern pattern = Pattern.compile(regex); 
     String ip = jFormattedTextField2.getText(); 
     Matcher m = pattern.matcher(ip); 
     jFormattedTextField2.setForeground(Color.red); 
     if (m.matches()) { 
      jFormattedTextField2.setForeground(Color.black); 
     } 
    }