問題タブ [inputverifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
99 参照

java - 別のクラスで抽象クラスinputverifier Javaを使用する

私は2つのクラスを持っています

finestraでVerifcaクラスを使いたいです。javax.swing.JFrame があるので拡張はしません。Verifica を使用するにはどうすればよいですか? そして、それは唯一の抽象メソッドverificaの問題です。

私はこれを試しますが、うまくいきません

0 投票する
1 に答える
686 参照

java - VerifyInputWhenFocusTarget プロパティは効果がありません

を使用してテキスト フィールドのユーザー入力を検証しようとしていますがjavax.swing.InputVerifier、入力の検証は期待どおりに機能しますが、プロパティに関して問題がVerifyInputWhenFocusTargetあります。

サブクラスのステータスとオーバーライドverify()およびshouldYieldFocus()メソッドを表示するラベルを作成しましたが、それは正常に機能します。InputVerifier

私がやりたかった次のステップは、ボタンの を設定して、現在のフォーカス所有者の検証が false の場合にフォーカスを取得しないようにすることでしたが、プロパティをVerifyInputWhenFocusTargetに設定した効果に気付かず、ボタンが現在のフォーカス所有者の検証が false の場合でも押されます。VerifyInputWhenFocusTargettrue

ドキュメントを理解していない可能性があります-ボタンのVerifyInputWhenFocusTargetプロパティをに設定するtrueと、テキストフィールドの誤った検証の状況下でクリックしたときにボタンがフォーカスを取得できないと思いました。さらに、ボタンがフォーカスを取得できない場合、そのactionPerformed()メソッドが呼び出されないことを (誤解して) 理解していました。

actionPerformed()ただし、によって「保護」されたテキスト フィールドの誤った検証にもかかわらず、ボタンをクリックすることができ、そのメソッドが実行されjavax.swing.InputVerifierます。

削除されたコードは次のとおりです。

テスト アプリケーションのスクリーンショットは次のとおりです。

InputVerifier テストのスクリーンショット

ご覧のとおり、ボタンが 2 つあります。それらの 1 つはVerifyInputWhenFocusTargetプロパティが に設定されtrue、もう 1 つは同じプロパティが に設定されてfalseいますが、テキスト フィールドの検証が誤っている状況でボタンをクリックしても違いはありません。誤った検証は、負の数または 4 桁を超える数を入力することによって引き起こされる可能性があります。InputVerifier確かに、フォーカスを他のテキスト フィールドに移動することはできませんが、ボタンをアクティブにすることはできません。最初にフォーカスを取得せずにボタンをアクティブにすることは (少なくとも私には) 意味がないためStart!、テキスト フィールドの検証メソッドverify()が返されたときにボタンをアクティブにする可能性はありませんfalse


編集:

Trashgod の提案に対応するようにコードを変更しました (Start!ボタンの有効状態を で条件付けますFocusListener)。実際の例は次のとおりです。

メソッドのコードを少し変更して、verify()何も入力されていない場合にフォーカスを変更できるようにしました (focusLost()メソッドは、すべてのテキスト フィールドに何らかの入力が含まれているかどうかをチェックしverify()、各テキスト フィールドを明示的に呼び出して入力が有効かどうかもチェックします)。

もちろん、コードには若干の微調整 (タブ オーダー、ステータスの更新など) が必要ですが、それはこのトピックの範囲外です。

結論:

VerifyInputWhenFocusTargetプロパティは明らかに便利ですが (この例では、?テキスト フィールドの検証が の場合でもボタンにフォーカスを当てることができますfalse)、私はまだ、ドキュメンテーションがすべての重要な副作用を説明する上で正確ではないという私の意見を保持しています。直観に反するため、ドキュメントを読むだけでなく、さらにテストと調査 (おそらくソース コードの分析) を行う必要があります。

0 投票する
1 に答える
963 参照

java - setEnabled(true) の直後に JButton がフォーカスを得ない

ユーザーが に数値を入力JTextFieldsし、キーで進みTAB、最後にボタンをアクティブにして入力の処理を開始する直感的なユーザー インターフェイスを作成しようとしています。

最初はボタンが無効になっており、すべてのデータがテキスト フィールドに入力された場合にのみ有効にする必要があります。

小数点以下 4 桁までの正の数値javax.swing.InputVerifierのみの入力を制限するために使用していますが、これは正常に機能します。

3 つのフォーカス可能なオブジェクト、2 つのテキスト フィールド、およびボタンがあります。TAB(有効な) 数値をテキスト フィールドに入力した後にキーを押し、すべてのテキスト フィールドに有効な入力が含まれている場合は、ボタンが有効になります。それもうまくいきます。

問題は次のとおり
です。 最初のテキスト フィールドに有効なデータが既に含まれているときに、2 番目のテキスト フィールドに有効なデータを入力して を押すとTABボタンが本来のフォーカスを得られません。代わりに、フォーカスは、(再び) 最初のテキスト フィールドである、行内の次のフォーカス可能なオブジェクトに転送されます。

私は2つの異なるアプローチを使用しようとしました:

  1. ボタンのenabledプロパティは、FocusListenerオーバーライドされたfocusLost()メソッド内で変更されます
  2. ボタンのenabledプロパティは、オーバーライドされたshouldYieldFocus()メソッド内で変更されます

どちらの場合も、ボタンを有効にした直後にフォーカスがボタンをスキップします。ただし、その後+キーを使用してフォーカスを変更し続けると、ボタンは 2 番目のテキスト フィールドの直後にフォーカスを取得します。TABSHIFTTAB

ボタンを有効にする前にコンポーネントが事前に定義されてoppositeいるため、ボタンが有効になった後でもボタンがフォーカスされないように思えます。

ボタンを有効にした後にボタンを強制的にフォーカスさせようとしましたrequestFocusInWindow()が、それもうまくいきませんでした。問題は、レイアウトを強制的 LayoutFocusTraversalPolicy に再評価して、新しく導入されたボタンをすぐに考慮できるようにする方法です。無効になる前に?

私が試した両方のアプローチのコードは次のとおりです。

  1. ボタンのenabledプロパティは、FocusListener内部focusLost()メソッドを介して変更されます。
  1. ボタンのenabledプロパティは、オーバーライドされたshouldYieldFocus()メソッド内で変更されます。

テスト アプリケーションのスクリーンショットは次のとおりです。

テスト アプリケーションのスクリーンショット

注:このコードは、別のトピックである、以前に尋ねた質問に
含まれるコードに関連しています。

編集:受け入れられた回答の作成者によって提案された提案(を実行するために
使用)を試してみると、概念実証として役立つコードは次のとおりです。invokeLater()requestFocusInWindow()

focusLost()これは、 に関連するメソッドの変更にすぎませんapproach #01。-で使用する同様の解決策があるかapproach #02どうかはわかりません。oppositeshouldYieldFocus()FocusListener

注:
このソリューションを使用すると、2 番目の数字を入力してTABボタンを押した後、フォーカスが最初に (一時的に) 最初のテキスト フィールドにジャンプしてから、ボタンに移動することがはっきりとわかります。

0 投票する
2 に答える
184 参照

java - getName メソッドは、他のクラスからの JTextField を検証できません

JTextField他の使用InputVerifier方法を確認したかったのです。私がしたことJTextFieldを使用して別の名前を設定しましたsetName

検証クラス

ここでわかるように、nameString が等しいかどうかを検証または確認しようとして"tfAddress"いますが、残念ながら条件を満たしていません。どうすればこれを解決できますか?

0 投票する
0 に答える
56 参照

java - void メソッドでクラス インスタンスを渡す

Add Employee クラスからボタンを制御しようとしているので、ユーザー入力が受け入れられた場合、またはInputVerifierを使用していない場合に無効または有効にできます。私がしたことaddEmployeeButtonのゲッターとセッターを作成しました

ValidateComponents という名前の別のクラスからアクセスしています。ただし、このdisableメソッドは AddEmployee インスタンスが渡されることを想定しています。nullNullPointerException がスローされるため、値を指定できません。

2回目の試行:

メソッドの外で AddEmployee クラスのインスタンスを作成しようとしたとき。それは私にStackOverFlowErrorを与え、これは作成した私のオブジェクトを指しています。この問題を解決する最善の方法を誰か教えてもらえますか? どんな助けでも大歓迎です。

0 投票する
1 に答える
57 参照

c# - 2 番目のフォームからユーザー ログインが成功した場合にのみ、メイン フォームを表示するにはどうすればよいですか?

ユーザーのログインを確認するフォームを作成しようとしています。そのフォームを最初に表示してから、ユーザーのログインが成功すると、メインフォームが表示されるはずです。

これは私が試したものです(2番目の形式で):

問題は、メイン フォームが常に最初に表示されることです。

次のようになります。

*2番目のフォームがポップアップし、ユーザーが認証されるとメインフォームがポップアップします