1

こんにちは?誰もが次のような問題を抱えていました:一度に複数のフィールドでカーソルが点滅していますか? 私の場合、次のことが起こります: フィールド JTextField をダブルクリックすると、JDialog が開きます。これを閉じると、画面を開く前にクリックしたフィールドにフォーカスが戻ります。

このアクションを実行した後、2 つのフィールドが同時に点滅します (通常、最初のフィールド画面と、efetuei がダブルクリックしたフィールド)。このメディアはランダムで、発生しない場合があります。

クラス DefaultCaret より具体的には actionPerformed メソッドに含まれる内部クラス Handler をデバッグすると、時間はフィールドであり、時間は別のフィールドであり、正確に点滅しているフィールドであることに気付きました (q は明らかなようです)。しかし、それらはメソッドを呼び出している Java の独自の内部クラスです。

タブを使用してフィールドを通過すると、カーソル false が消えます。

私はJDK 6を使用しています


invokeLater() 内でフォーカスを返しましたが、解決されませんでした。両方がシンクロフラッシュになりました

フォーカス可能な最初の JComponent は、不適切に点滅するフィールドの 1 つです。

私は独自の FocusTraversalPolicy を使用していますが、それが影響している可能性はありますか? 面白いことに、私のクラスには特に変な扱いはありません。

Syncronized getFirstComponent() 内のメソッドを使用する標準の Java クラスに気付きましたが、同じコントロールを追加しましたが、それでも問題ありません。

4

2 に答える 2

5

実際、それは私にとってフォーカスの問題です。

通常、JTextComponentFocusを失うとsetCaretVisible(false)/setSelectionVisible(false)が呼び出され、Focus が得られると逆のことが起こります。

閉じた後JDialog、Focus を に戻してみてくださいinvokeLater()。の親JComponentで最初にフォーカスできるものも確認してください。JDialog

于 2012-06-23T08:06:12.487 に答える
0

この状況は、私が開発しているプロジェクトが非常に大きいために発生するため、実装の小さな例を取得しないでください

プロジェクトには、同時に集中する必要がある多くのコンポーネント、テーブルとコンテナがあります。

Swing は、実行のためにキューに入れ、多くのスレッドを配置し、それらをディスパッチします。彼が実行を終了していない間に、grabFocus() または requestFocus() を詰め込むことができます。まず、彼はすべてを終了してから、私のリクエスト フォーカスを実行する必要があります。

Swing SwingUtilities.invokeLater(...); を使用して、この状況を緩和的に解決しました。

ヒントをありがとう。

于 2012-07-06T12:18:03.767 に答える