1

java.awt.Component.getName() プロパティに関する私の質問の補足として、 .NET のタグ プロパティと同様に、Component のどこかに任意のオブジェクトを照会する方法があるかどうか疑問に思っています。これは、コンポーネントに対して機能するが、そのコンポーネントが何であるかを必ずしも認識していないコードにとって非常に便利です。

たとえば、マウスが現在ポイントしているコンポーネントを見て、そのコンポーネントに手を伸ばしてヘルプテキストを引き出し、画面上の独自のペインに表示することを知っているアプリケーション全体のヘルプシステムを実装しようとしているとします。 (いいえ、ツールチップは使いたくありません)。現在の私の答えは、名前 (getName()/setName()) を使用してヘルプ テキストを保存することです。これは機能しますが、名前は文字列でなければなりません。もっと手の込んだものにして文字列以外のものを保存したい場合は、行き詰まると思います。

4

4 に答える 4

3

JComponentとがputClientPropertyありgetClientPropertyます。

于 2008-10-23T13:30:12.023 に答える
1

コンポーネントにはこれを行う方法がありません。ただし、1 つのオプションとして、静的マップを使用し、その周りにラッパーを提供して、任意の UI (またはその他の) オブジェクトに関連するデータをクエリできるようにする方法があります。私は以前にこの種のことを行ったことがありますが、インターフェースを備えた一種のサービスとしてセットアップする限り、それは非常にエレガントであり、OO 設計を壊すことはありません。

于 2008-10-22T19:45:18.333 に答える
1

通常、画面にコンポーネントを追加するたびに、ハッシュを作成して (コンポーネント、クッキー) を配置します。Cookie オブジェクトを戻す必要がある場合 (おそらくイベントで)、イベントは常にコンポーネントのコピーを取得するため、Cookie から get(コンポーネント) だけ離れています。

いくつかの極端な状況では、コントロールをサブクラス化し、フィールドを追加しました。コンポーネントのサブクラス化は数行のコードのようなものであり、画面を生成しているファイルと同じクラスに入ることができるため、これは迅速で汚い修正です。これは、単一のタイプのコントロールに接続されたデータを保存する必要がある場合にのみ役立ちます。

于 2008-10-22T20:51:33.583 に答える
0

ええ、get / setNameを使用してある種の識別子を設定し、その識別子を使用してヘルプにマッピングすることができます。JavaHelp CSHのものは、コンポーネント自体をマップに配置していると私が信じていることを除いて、そのように機能しますか?

于 2008-10-22T20:38:56.527 に答える