1. ホーム
  2. java

[解決済み] SetFocusable メソッドまたは Focusing Components Java

2022-02-17 03:06:51

質問

このコードに出会いました。

public class Board extends JPanel implements ActionListener{

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

は具体的にどのようなものなのでしょうか? setFocusable(true) は、JPanel オブジェクトに何をするのですか?コンポーネントがフォーカスされるというのは、どのような概念ですか?

Java APIに基づき、このメソッドはJPanelのスーパークラスであるComponentクラスに配置されています。メソッドの説明では、 "このComponentのフォーカス可能な状態を指定された値に設定します。この値は、Componentのデフォルトのフォーカス可能性をオーバーライドします。時々、このメソッドの説明は、Javaの知識のレベルが異なるすべての人のために書かれているわけではないと思うことがあります。どなたか、このメソッドの説明を平易な言葉で説明していただけませんか?

どのように解決するのですか?

その focusable フラグは、コンポーネントがフォーカスを得るように要求された場合に、そのフォーカスを得ることができるかどうかを示します。JPanelコンポーネントはデフォルトでフォーカス可能なので、これを true .

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

例えば、いくつかのテキストフィールドを持つダイアログを実装し、ユーザーにテキストを入力させたいとします。ユーザーがテキストを入力し始めると、1つのテキストフィールドがアプリケーションのフォーカスになる必要があります。

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

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

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

setFocusable はそれ自体でフォーカスを設定するのではなく、コンポーネントにフォーカスを獲得する可能性を与えるだけであることに注意してください。