問題タブ [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.
java - 別のクラスで抽象クラスinputverifier Javaを使用する
私は2つのクラスを持っています
finestraでVerifcaクラスを使いたいです。javax.swing.JFrame があるので拡張はしません。Verifica を使用するにはどうすればよいですか? そして、それは唯一の抽象メソッドverificaの問題です。
私はこれを試しますが、うまくいきません
java - VerifyInputWhenFocusTarget プロパティは効果がありません
を使用してテキスト フィールドのユーザー入力を検証しようとしていますがjavax.swing.InputVerifier
、入力の検証は期待どおりに機能しますが、プロパティに関して問題がVerifyInputWhenFocusTarget
あります。
サブクラスのステータスとオーバーライドverify()
およびshouldYieldFocus()
メソッドを表示するラベルを作成しましたが、それは正常に機能します。InputVerifier
私がやりたかった次のステップは、ボタンの を設定して、現在のフォーカス所有者の検証が false の場合にフォーカスを取得しないようにすることでしたが、プロパティをVerifyInputWhenFocusTarget
に設定した効果に気付かず、ボタンが現在のフォーカス所有者の検証が false の場合でも押されます。VerifyInputWhenFocusTarget
true
ドキュメントを理解していない可能性があります-ボタンのVerifyInputWhenFocusTarget
プロパティをに設定するtrue
と、テキストフィールドの誤った検証の状況下でクリックしたときにボタンがフォーカスを取得できないと思いました。さらに、ボタンがフォーカスを取得できない場合、そのactionPerformed()
メソッドが呼び出されないことを (誤解して) 理解していました。
actionPerformed()
ただし、によって「保護」されたテキスト フィールドの誤った検証にもかかわらず、ボタンをクリックすることができ、そのメソッドが実行されjavax.swing.InputVerifier
ます。
削除されたコードは次のとおりです。
テスト アプリケーションのスクリーンショットは次のとおりです。
ご覧のとおり、ボタンが 2 つあります。それらの 1 つはVerifyInputWhenFocusTarget
プロパティが に設定されtrue
、もう 1 つは同じプロパティが に設定されてfalse
いますが、テキスト フィールドの検証が誤っている状況でボタンをクリックしても違いはありません。誤った検証は、負の数または 4 桁を超える数を入力することによって引き起こされる可能性があります。InputVerifier
確かに、フォーカスを他のテキスト フィールドに移動することはできませんが、ボタンをアクティブにすることはできません。最初にフォーカスを取得せずにボタンをアクティブにすることは (少なくとも私には) 意味がないためStart!、テキスト フィールドの検証メソッドverify()
が返されたときにボタンをアクティブにする可能性はありませんfalse
。
編集:
Trashgod の提案に対応するようにコードを変更しました (Start!ボタンの有効状態を で条件付けますFocusListener
)。実際の例は次のとおりです。
メソッドのコードを少し変更して、verify()
何も入力されていない場合にフォーカスを変更できるようにしました (focusLost()
メソッドは、すべてのテキスト フィールドに何らかの入力が含まれているかどうかをチェックしverify()
、各テキスト フィールドを明示的に呼び出して入力が有効かどうかもチェックします)。
もちろん、コードには若干の微調整 (タブ オーダー、ステータスの更新など) が必要ですが、それはこのトピックの範囲外です。
結論:
VerifyInputWhenFocusTarget
プロパティは明らかに便利ですが (この例では、?テキスト フィールドの検証が の場合でもボタンにフォーカスを当てることができますfalse
)、私はまだ、ドキュメンテーションがすべての重要な副作用を説明する上で正確ではないという私の意見を保持しています。直観に反するため、ドキュメントを読むだけでなく、さらにテストと調査 (おそらくソース コードの分析) を行う必要があります。
java - setEnabled(true) の直後に JButton がフォーカスを得ない
ユーザーが に数値を入力JTextFields
し、キーで進みTAB、最後にボタンをアクティブにして入力の処理を開始する直感的なユーザー インターフェイスを作成しようとしています。
最初はボタンが無効になっており、すべてのデータがテキスト フィールドに入力された場合にのみ有効にする必要があります。
小数点以下 4 桁までの正の数値javax.swing.InputVerifier
のみの入力を制限するために使用していますが、これは正常に機能します。
3 つのフォーカス可能なオブジェクト、2 つのテキスト フィールド、およびボタンがあります。TAB(有効な) 数値をテキスト フィールドに入力した後にキーを押し、すべてのテキスト フィールドに有効な入力が含まれている場合は、ボタンが有効になります。それもうまくいきます。
問題は次のとおり
です。
最初のテキスト フィールドに有効なデータが既に含まれているときに、2 番目のテキスト フィールドに有効なデータを入力して を押すとTAB、ボタンが本来のフォーカスを得られません。代わりに、フォーカスは、(再び) 最初のテキスト フィールドである、行内の次のフォーカス可能なオブジェクトに転送されます。
私は2つの異なるアプローチを使用しようとしました:
- ボタンの
enabled
プロパティは、FocusListener
オーバーライドされたfocusLost()
メソッド内で変更されます - ボタンの
enabled
プロパティは、オーバーライドされたshouldYieldFocus()
メソッド内で変更されます
どちらの場合も、ボタンを有効にした直後にフォーカスがボタンをスキップします。ただし、その後+キーを使用してフォーカスを変更し続けると、ボタンは 2 番目のテキスト フィールドの直後にフォーカスを取得します。TABSHIFTTAB
ボタンを有効にする前にコンポーネントが事前に定義されてopposite
いるため、ボタンが有効になった後でもボタンがフォーカスされないように思えます。
ボタンを有効にした後にボタンを強制的にフォーカスさせようとしましたrequestFocusInWindow()
が、それもうまくいきませんでした。問題は、レイアウトを強制的 LayoutFocusTraversalPolicy
に再評価して、新しく導入されたボタンをすぐに考慮できるようにする方法です。無効になる前に?
私が試した両方のアプローチのコードは次のとおりです。
- ボタンの
enabled
プロパティは、FocusListener
内部focusLost()
メソッドを介して変更されます。
- ボタンの
enabled
プロパティは、オーバーライドされたshouldYieldFocus()
メソッド内で変更されます。
テスト アプリケーションのスクリーンショットは次のとおりです。
注:このコードは、別のトピックである、以前に尋ねた質問に
含まれるコードに関連しています。
編集:受け入れられた回答の作成者によって提案された提案(を実行するために
使用)を試してみると、概念実証として役立つコードは次のとおりです。invokeLater()
requestFocusInWindow()
focusLost()
これは、 に関連するメソッドの変更にすぎませんapproach #01
。-で使用する同様の解決策があるかapproach #02
どうかはわかりません。opposite
shouldYieldFocus()
FocusListener
注:
このソリューションを使用すると、2 番目の数字を入力してTABボタンを押した後、フォーカスが最初に (一時的に) 最初のテキスト フィールドにジャンプしてから、ボタンに移動することがはっきりとわかります。
java - getName メソッドは、他のクラスからの JTextField を検証できません
JTextField
他の使用InputVerifier
方法を確認したかったのです。私がしたことJTextField
を使用して別の名前を設定しましたsetName
。
検証クラス
ここでわかるように、name
String が等しいかどうかを検証または確認しようとして"tfAddress"
いますが、残念ながら条件を満たしていません。どうすればこれを解決できますか?
java - void メソッドでクラス インスタンスを渡す
Add Employee クラスからボタンを制御しようとしているので、ユーザー入力が受け入れられた場合、またはInputVerifierを使用していない場合に無効または有効にできます。私がしたことaddEmployeeButtonのゲッターとセッターを作成しました
ValidateComponents という名前の別のクラスからアクセスしています。ただし、このdisable
メソッドは AddEmployee インスタンスが渡されることを想定しています。null
NullPointerException がスローされるため、値を指定できません。
2回目の試行:
メソッドの外で AddEmployee クラスのインスタンスを作成しようとしたとき。それは私にStackOverFlowErrorを与え、これは作成した私のオブジェクトを指しています。この問題を解決する最善の方法を誰か教えてもらえますか? どんな助けでも大歓迎です。
c# - 2 番目のフォームからユーザー ログインが成功した場合にのみ、メイン フォームを表示するにはどうすればよいですか?
ユーザーのログインを確認するフォームを作成しようとしています。そのフォームを最初に表示してから、ユーザーのログインが成功すると、メインフォームが表示されるはずです。
これは私が試したものです(2番目の形式で):
問題は、メイン フォームが常に最初に表示されることです。
次のようになります。
*2番目のフォームがポップアップし、ユーザーが認証されるとメインフォームがポップアップします