5

私はこのコードに出くわしました:

public class Board extends JPanel implements ActionListener{

    public Board() {
        setFocusable(true); 
    }
}

JPanelオブジェクトは正確に何setFocusable(true)をしますか?焦点を合わせているコンポーネントの概念は何ですか?

Java APIに基づいて、このメソッドは、JPanelのスーパークラスであるComponentクラスにあります。メソッドの説明には、「このコンポーネントのフォーカス可能な状態を指定された値に設定します。この値は、コンポーネントのデフォルトのフォーカス可能性をオーバーライドします。」と記載されています。この説明は、私(夏にJavaクラスを終了したばかり)にとってはあまりにも技術的で高レベルの専門用語に聞こえます。時々、これらのメソッドの説明は、Javaの知識のレベルが異なるすべての人のために書かれたものではないと思います。誰かが素人の言葉でメソッドの説明を説明してもらえますか?

4

3 に答える 3

10

このfocusableフラグは、要求された場合にコンポーネントがフォーカスを取得できるかどうかを示します。JPanel コンポーネントはデフォルトでフォーカス可能であるため、 に設定しても何も変更されませんtrue

フォーカス可能でないコンポーネントはフォーカスを取得できません。

いくつかのテキスト フィールドを持つダイアログを実装しており、ユーザーにテキストを入力してもらいたいとします。ユーザーが入力を開始すると、1 つのテキスト フィールドがアプリケーションのフォーカスを持つ必要があります。それは、キーボード入力を受け取るフィールドになります。

フォーカス トラバーサル (ユーザーがボタンを使用して、あるテキスト フィールドから次のテキスト フィールドにジャンプする便利な方法) を実装すると、tabユーザーは次のテキスト フィールドに「ジャンプ」できます。アプリケーションは、テキストを受け取る準備をするために、次のフィールドのフォーカスを取得しようとします。次のフィールドがフォーカス可能でない場合、このリクエストは拒否され、次のフィールドがテストされます。たとえば、ラベルにテキストを入力できないため、ラベルにフォーカスを移したくないでしょう。

focusable フラグはtrue、デフォルトでComponentクラスに設定されています。クラスから派生したオブジェクトを構築する場合Component(たとえば、 を構築する場合JPanel)、Componentクラスのコンストラクターが呼び出され、デフォルトのフォーカス可能フラグが に設定されtrueます。

このデフォルトをオーバーライドしたい派生クラスsetFocusableは、例で行ったように、メソッドを呼び出してそのデフォルトを変更できます。

setFocusable はそれ自体でフォーカスを設定するのではなく、潜在的にコンポーネントにフォーカスを取得する機能を提供するだけであることに注意してください。

于 2012-12-30T22:08:34.753 に答える
0

setFocusable()実際にはComponent、Swing のクラスのメソッドです。

public void setFocusable(boolean focusable)

コンポーネント(あなたの場合はJPanelextends Componentにフォーカスする力を持たせます。コンポーネントがフォーカスされるように実際に設定するのではなく、渡されたブール値パラメーターによって決定される、コンポーネントがフォーカスされるかどうかを示すだけです。

于 2015-08-04T08:41:21.047 に答える