JFormattedTextField
Swing アプリの整数入力をフォーマットするために for を使用しています。無効な入力に対するデフォルトの動作は、テキスト フィールドを静かに (つまり、エラー メッセージを表示せずに) 前の値にリセットすることです。JOptionPane
にフォーカスを戻す前にでエラーメッセージを表示したいJFormattedTextField
。
FocusListener
私の最初の解決策は、テキスト フィールドに sを実装することでした。それぞれに同じサブクラスのインスタンスを追加することを検討しましFocusListener
たが、NetBeans GUI ビルダーを使用しているため、問題が発生しました。@HovercraftFullOfEelsを使用することを提案しましたInputVerifier
。次のカスタム InputVerifier を実装しました。
public class ValidTextFormatInputVerifier extends InputVerifier {
@Override
public boolean verify(JComponent jc) {
return ((JFormattedTextField)jc).isEditValid();
}
}
これをさらに調べていると、内部的にJFormattedTextField
使用している印象を受けます。InputVerifier
(ただし、これについて明示的に述べられているものはまだどこにもありません。) このため、私の習慣InputVerifier
は不必要に思えます。
より大きな問題は、テキスト フィールドがエラー メッセージなしでサイレントにリセットされることです。ここに呼び出しを追加できJOptionPane.showMessageDialog()
ます。ただし、これはエラー メッセージを表示する適切な場所ではないようです。は、無効な入力のInputVerifier
正確な性質も、有効な入力の形式も認識していません。これは、意味のあるエラー メッセージを提供するためにさらに重要です。
頭に浮かぶ最初の解決策はString
、表示するエラー メッセージを含むパラメーターを受け取るコンストラクターを追加することです。ただし、これはエラー メッセージのロジックを間違った場所に配置しているようです。
エラー処理とユーザーへのメッセージ提供のための一般的な Java イディオムはありますか? エラー メッセージをきれいに表示するようにアプリケーションを設計する方法を教えてください。また、別のプラットフォーム (コマンドライン、モバイルなど) を使用してソフトウェアのインターフェイスを設計することにした場合、既存のコードベースをできるだけ再利用できるようにしたいと考えています。(もちろん、これは主に UI の問題であるため、おそらくその要件は、私がここで望んでいるほど強くは適用されません。)