2009-06-10 4 views
4

私は、フォーマットされたIPアドレスのテキストフィールドがあります。JFormattedTextFieldの値をプレースホルダ文字で設定するにはどうすればよいですか?

field.setValue("10 .222.333.444");

field.setValue("10.222.333.444");が動作しない動作しない動作しません

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

field.setValue("111.222.333.444");作品が、

field.setValue(" 10.222.333.444");

ヴァルを設定する正しい方法は何ですかue?

+0

どうやら、プレースホルダ文字が末尾にのみ使用することができ

このコードは、GUIビルダーを使用して生成されます文字列の私はこれを回避する方法を見つけることができない、私は間違った答えを削除しています。 –

答えて

1

スペースは数字(#)と数字ではカウントされません。何かに数えます。残念ながら、1つのJFormattedTextFieldに対して複数のMaskFormatterを持つ方法が見つからない限り、IPアドレスをMaskFormatterに一致させることはできません。

単純

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

EDIT:あなたが定期的のJTextFieldを使用して、それが

+0

私はこれを行うために自分のクラスを書くことができることを知っていますが、それを行うためにJavaクラスを構築した方がよかったです。 – 5YrsLaterDBA

5

むしろ奇数検証する必要がありますが、これは(Java: network settings windowで)別の質問に思い付きました。

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"); 

あなたはおそらく、ここから上に移動、私は「考えた:あなたはこのように使用することができます。周りに掘った後日(http://java.sun.com/products/jfc/tsc/articles/reftf/RegexFormatter.javaのソースコードをダウンロードhttp://java.sun.com/products/jfc/tsc/articles/reftf/を参照)からRegexFormatterの実装があり判明誰か他の人が一緒にさまよった場合に備えてこれを守る。

0

私はマスクフォーマッタを使用しようとしましたが、私たちの状況は良くありませんので、Regexとユーザ入力の瞬間検証を使ってこの方法を考え出しました。入力がマッチャーを使用して検証されるすべてのフィールドの更新に

ここ
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); 
     } 
    } 
関連する問題