2017-03-31 3 views
1

これは学業であるため、私は完全な解決策を望んでいない。 )。ArrayListで最新の形状を取得して他の図形の上にペイントする - Java

マウス入力を処理するクラスがあります。そのクラスから、ユーザーがシェイプ上でマウスボタンを押したままで、そのシェイプをアクティブシェイプに設定するかどうかを確認します。ユーザーがシェイプをドラッグしている間に、シェイプはそれに沿って移動し、それに応じて位置を変更します。マウスが離されると、selectedShapeはnullに設定され、パネルは再描画されます。

私はselectedShapeが他のすべての図形の上にあるようにしたいので、選択した図形が他の図形の上にドラッグされていると、それは正面になります。

repaint()メソッドは、ArrayListに表示されるときにrepaint()メソッドを再描画するだけで、上にそのシェイプをペイントするために別のメソッドを使用する必要があります(視覚的に言えば)。

ここで、この機能を追加する方法はありますか。 MouseHandlerクラスでは? - 親クラス 三角形、正方形、円形 - チャイルド - マウスの動きをと、各形状を呼び出す - MouseHandler 独自ドロー(g)の方法およびsetPositionを有する MyShape

クラスは関連していることが含ま新しい位置を設定する。 MyShapeHandler - リストから図形を追加/削除する パネル - 図形のインスタンスを作成し、MyShapeHandlerヘルプメソッドaddShapeを使用してArrayListに追加します。 drawComponent(g)を使用して各形状をArrayListに描画します。 ウィンドウ - パネルを追加するJFrame

+0

シェイプオブジェクトの順序が特に必要ない場合は、Listインタフェースで提供される 'set(index、object)'を使用して、最後に選択したオブジェクトと最後のオブジェクトをスワップするだけです。 MouseReleasedメソッドでMouseHandlerでそれを行う必要があります。 – skubski

+0

図形がどのように重なったり、他の図形で完全に囲まれているかを考えれば、私はすべての図形のリストを(JListのように)保持しています。このリストは、「現在の移動する形状」の選択を可能にする。次に、ペイントするときに最初にシェイプのリスト全体をペイントし、最後に選択されたシェイプをペイントして(2回目)ペイントすることで簡単にエミュレートできます。 –

答えて

0

希望の形状が最初/最後になるようにリストを並べ替えることができます。リスト内の図形のインデックスが画面上の前後の位置に対応しているかどうかを試してみてください。

+0

これは素晴らしいアイデアです。私は今度はその選択された形を最後に置き換えました。 2つの位置をお互いに切り替えるためのArrayListに便利なメソッドはありませんか? –

+0

私はそれがCollections.swap()を使って動作するように管理しました。これは、最後の位置(shapes.set(shape.size() - 1、selectedShape)私はここに新しいです、私は答えやそれに類するものを投票するような何かが必要なのですか? –

+0

@VitalViper素晴らしい。あなたは私の答えを投票することができるので、私はいくつかの評判を得ることができます: - )さらに、あなたはこの答えを最善のものとして受け入れることができるので、私はさらに評判を得ることができます:-)これについての詳細はhttp://stackoverflow.com/tourを見てください。 –

関連する問題