どのようにして(丸い四角形のような)図形をコンポーネントに型変換できますか?型をJavaのコンポーネントにキャストしますか?
答えて
キャスティングは、オブジェクトの参照を別の表現に変更するだけで、異なるタイプのオブジェクトに変換したりオブジェクトを変更することはありません。いくつかの作られたクラスで例を与える
、すでに実際にその形状のときに限り、広場に図形をキャストすることができ広場です。
Shape shape = new Square();
Square square = (Square) s; // this will be okay!
これはちょうどに関連付けられているオブジェクトの既存の余分な動作を公開していますそれは正方形になり、正方形に変換されません。次の例のように、これを行うことはできません。
Shape shape = new Square();
Circle circle = (Circle) shape; // this will throw a ClassCastException
形状が実際に開始する円形ではなく、あなたが潜在的に実際のために意味がありません行動(例えばgetPerimeter())をさらすことになるので基礎となるオブジェクト。
同様に、あなたのケースでは、シェイプはコンポーネントではなく、決してそのようになりません。したがって、シェイプはコンポーネントにキャストできません。この動作はShapeクラスではサポートされていないため、キャストを実行してコンポーネントに関連する動作を公開することはできません(リスナーを追加する)。シェイプクラスは、リスナーを追加することに意味があっても、インターフェイスからイベントメッセージを受け取ることはありません。コンポーネントが最初にComponentとしてインターフェイスに追加されていないためです。おそらく、図形をコンポーネントに手動で塗りつぶしているので、コンポーネント階層の一部ではないことをすでに理解しているはずです。
あなたが提案したように、これを処理する最良の方法は、既にコンポーネント内に図形が描画されていることを前提としており、関連するMouseEventのx座標とy座標がそれぞれ形状。
最初からコンポーネントとして扱いたい場合は、シェイプごとにコンポーネントを作成し、残りのインターフェイスを作成するのと同じ方法で、LayoutManagerを使用してコンテナに追加する必要があります。これは、あなたが言ったように "カスタムコンポーネント"を作成することを含みます。これは、使用する準備ができているクラスまたはメソッドではなく、コンポーネントの独自のサブクラスを作成することを意味します。コンストラクタ。 Here is an example私はあなたのニーズを満たす必要がありますラウンド、カスタムボタンのコンポーネントを作成するために見つかりました。
あなたは基本的にあなたの最後のコメントのほとんどの部分についてあなた自身の質問に答えました。これはうまくいけば理解しやすくなります:)。
乾杯、これが助けてください。
今後のご意見から、カスタムコンポーネントを作成したいと思っています。
ここで難しいのは、カスタムコンポーネントが本当に必要なのかどうかです。
通常は、シェイプクラスを拡張し、contains()(必要な他のメソッド)とpaint()メソッドを実装/オーバーライドするだけでよいでしょう。
次に、シェイプの配置に使用するコンテナクラス(JFame、JPanel、..)内でリスナーを設定し、shape.contains(point)を使用してイベントを処理できます。
本当にコンポーネントが必要な場合は、イベントを処理したり、他のコンポーネントやレイアウトマネージャとやりとりすることができます。
thisの例を確認できます。
- 1. String型からjava型にfloat型にキャストできません。
- 2. Javaプログラミング、型キャスト
- 3. 型キャスト/ Javaのダウンキャスト
- 4. Java - 型への変数のキャストは型のクラスをインスタンス化しますか?
- 5. Javaの数学の型キャスト
- 6. Java:クローンの前に型キャストする?
- 7. のJava型キャストと継承
- 8. Java:メソッドのオーバーライドと型キャスト
- 9. 共変戻り型のJava型キャスト
- 10. Javaジェネリックはまだ型キャストを強制します
- 11. JAVAの参照型に型キャスト 'null'を使用するとは何ですか?
- 12. クラスの型をメソッドに渡し、その型にキャストしますか?
- 13. Javaでの型キャストの定義
- 14. Javaにプリミティブ型のキャストを模倣するメソッドがありますか?
- 15. メソッドに渡されたオブジェクトを元の型にキャストするJava
- 16. キャストJavaオブジェクトをクラスにキャスト
- 17. プロトコルのみを使用して型間をキャストしますか?
- 18. javaでの型キャストとは何ですか?
- 19. Javaのリフレクションジェネリックス - コンパイル時にパラメータを渡してキャストしますか?
- 20. javaはintをバイトに型キャストするためにどのアルゴリズムを使用しますか?
- 21. Javaで型キャストを実行中にコンパイルエラーが発生する
- 22. Java - Java.lang.Objectからカスタムクラスのインスタンスへの型キャスト
- 23. 型へのキャスト
- 24. BigDecimalの型キャスト
- 25. Matlabの型キャスト
- 26. HTMLの型キャスト
- 27. バイナリツリーでNode型からInteger型にJavaをキャストするにはどうすればいいですか?
- 28. クラスの型Cを基底クラスに動的にキャストします。
- 29. 型パラメータを使用した型キャスト
- 30. プリミティブ型のキャストはメモリ使用量を増減しますか?
私は質問が意味をなさないと思います...または少なくとも私はそれを理解しません。 –
ああ...できない? – mre
コンポーネント(JPanelのような)の図形をペイントすることができます。 – LazyCubicleMonkey