前回の入力値チェックの欠点は指数表記を受け付けないことだ。
入力文字を随時チェックしいているため、指数表記の途中を不適格な実数と判定してしまう。
そこで以下のように改修してみた。
// 実数に限定する場合 ((AbstractDocument)tf.getDocument()).setDocumentFilter( new ValueDocumentFilter() { protected void parse(String proposedValue) { protected void parse(String proposedValue) { if(proposedValue.length() > 0 && (proposedValue.charAt(proposedValue.length() - 1) == 'e' || proposedValue.charAt(proposedValue.length() - 1) == 'E')) { proposedValue = proposedValue.replaceFirst("" + proposedValue.charAt(proposedValue.length() - 1), ""); } Double.parseDouble(proposedValue); } } );
指数表記の入力途中が不適格な実数にならないようにしているだけで、かなり苦しい対応になっている。
しかも不適格な実数の状態で入力を確定した場合は悲惨である。
リアルタイムチェックだけでは数値の整合性を保証できないわけだ。
従って入力確定後のチェックが必要となる。