2

JFormattedTextFieldSwing アプリの整数入力をフォーマットするために 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 の問題であるため、おそらくその要件は、私がここで望んでいるほど強くは適用されません。)

4

2 に答える 2

5

私の最初の意見は、テキスト フィールドのフォーカスが失われるたびにユーザーに JOptionPane を表示することは、ユーザーにとって非常に煩わしい可能性があるということです。ユーザーがフォームの [OK] ボタンをクリックすると、エラー メッセージが表示されます。エラー メッセージには、すべてのエラー メッセージのリスト、または最初のエラー メッセージのみのリストを含めて、エラーのある要素に焦点を当てることができます。

もう 1 つの選択肢は、regular を使用しJTextFieldて独自のカスタム バリデータを作成することです。フォーカスが変更されると、IntegerValidator (または他の実装) が入力文字列を検証し、UI はフィールドの横にエラーまたは警告アイコンを表示できます。これは、一部の Web アプリケーションと同じです。

于 2012-08-28T18:39:39.440 に答える
4

JLayer (Java 7) またはJXLayer (Java 6 以下)を見てみたい

これにより、フィールドまたはフォームをさまざまな状態で装飾することができます。

いつだって。

私はある種の蛍光ペンを使用することから始めます.Danはアイコンを使用することを提案していJLayerますJXLayer.

ダイアログを表示して無効なフィールドにフォーカスを戻す前に、ユーザーがフォームを送信しようとするまで待ちます。

基本的な考え方は、ユーザーがあまり制限なくフォームを自由に移動できるようにすることです (すべての人が直線的に考えるわけではないため)。彼らはエラーを見つけるためにフォームを送信します (これまでに使用した最悪の Web フォームを考えてみてください)。

明らかに、彼らがフォームを送信しようとしてエラーが発生した場合は、エラー メッセージを表示し、最初の問題のあるフィールドを強調表示する必要があります。

JLayer/の例についてJXLayerは、JXLayer を使用した検証オーバーレイコンポーネントの装飾方法をご覧ください。

于 2012-08-28T20:32:16.993 に答える