何java.awt.Component.getName()
のために使われますか?null
私が NetBeans で構築したアプリケーションには常にあるようです。コンポーネントごとにヘルプ テキストを保存することを考えています。ツールチップを使用したくありません。ヘルプ テキストを表示する別のパネルがあります。
9 に答える
Component.setName(..) は、各コンポーネントに ID のような文字列を設定するために、主にルック アンド フィール実装クラスによって JDK で使用されます。
getName() は、コンポジット/親コンポーネント内の子コンポーネントの名前を設定するとき、および AWT および Swing デバッグ ロギング コードで toString() メソッドで使用されます。getName() メソッドは、一部の AWT/Swing テスト フレームワークでも使用されているのではないかと強く疑っています。
したがって、上記の getName() の使用法に依存していない場合は、ヘルプ メッセージに使用することをお勧めしますが、お勧めしません。
たぶん、あなたのデザインを再考する必要がありますか?名前を使用して、リソース バンドルからヘルプ テキストをロードするハッシュマップでルックアップを行いますか?
フレームワークによって何かに使用されているのを見たことがありません。コンポーネントがメソッドに渡されている場合に便利なので、コンポーネントの名前を聞いて処理方法を決定できます。また、多くの UI テスト フレームワークでは、これを使用して、テスト スクリプト内でコンポーネントを名前で参照できるようにしています。ただし、ヘルプ テキストに使用できない理由はわかりません。
FESTは、コンポーネントの名前を使用して、テストケースでコンポーネントを識別します。
Herman Lintvelt の答えは、私のアプリにとって正しいものになりました。
HelpText.properties という名前のリソース バンドルを作成しました。名前=値のペアが含まれています。name=value ペアからの「名前」を使用して、各コンポーネントを setName()d しました。次に、フレームの getGlassPane() を使用して、すべてのマウスの動きをキャプチャしました。マウスが名前付きコンポーネント上を移動すると、バンドル内の名前が検索され、利用可能な場合はヘルプが表示され、マウスの動きが実際のコンポーネントに転送されます。
- ガラス板の使い方はこちらをご覧ください。
- リソースバンドルの使用に関するJan Newmarch のWeb ページは非常に役に立ちました。
- Kevin Riff の回答は、リソース バンドルを見つける方法を理解するのに役立ちました。
うわー。2 日間だけの食事です。やっとJavaに慣れてきました:)
このcomponent.getName()
メソッドは主にリスナーで使用されます。コンポーネント ( ) の名前を設定するとcomponent.setName(name)
、 のメソッド内からその特定のコンポーネントを呼び出すことができますListener
。
例:
public void someMethodOfsomeListener(SomeEvent e){
if (e.getComponent().getName().equals(component.getName())
//do stuff...
}
コンポーネントの名前を明示的に設定する必要があることに注意してください。そうしないと、 が返されnull
ます。
また、java.awt.ComponentはXのヘビーウェイトオブジェクトだと思うので、xwininfoやxwdなどのプログラムで名前で指定できる場合があります。
JFrameで試してみましたが、setNameはウィンドウの名前を設定しませんでした。ウィンドウは、コンストラクターで渡した文字列によって名前が付けられました。しかし、テストするawtのみのサンプルコードがないため、上記の内容について間違っている可能性があります。
私はそれを1つのクラスのリスナーを別々に処理するために使用します。object.addListenerを含むコンポーネントをコンテナーとしてではなく、そのオブジェクトを含むクラスとしてパラメーターとして受け取ります。最初に名前を設定するためのヒントを提供してくれたVivavinylに感謝します。それは役に立ち、うまくいきました。
これは私が getName() を使用するものです:
Frame[] frames = JFrame.getFrames();
for (int i = 0; i < frames.length; ++i) {
//get the frame
Frame frame = frames[i];
if (frame.getName().equals(frameName)) {
//make the frame visible
frame.setVisible(true);
//focus the frame
frame.requestFocus();
//found
return;
}
}