2017-05-09 8 views
1

私は、スイングアプリケーション(rip i know)を作成しており、2つのJLabelsを互いに重ねて配置したいと考えています。シナリオを聞くオーバーレイされたJLabelsを追加する

ゲームは島の鳥瞰図であり、島は格子の四角で区切られています...これらの格子の四角のそれぞれに、1つのアイテムと1つの動物がたくさんあります。 2つのJLabelを作成しました。

JLabel animal = new JLabel(); 
JLabel item = new JLabel(); 

イメージを設定するためにanimal.setIcon(...);を使用しました。今これは完璧に動作していますが、私は動物のラベルの上にイメージを配置したいので、私は2つのグリッドを同じグリッドに表示することができます。

私はこれが正常に動作します(これはgridsquareクラスです)私は、後のJFrameに追加した、のJPanelを拡張したクラスで

if(inputItem!= null){ 
      try{ 
       imgItem = ImageIO.read(inputItem); 
       itemLabel.setIcon(new ImageIcon(imgItem.getScaledInstance(this.getWidth(), this.getHeight(), Image.SCALE_SMOOTH))); 
       this.add(itemLabel); 
      }catch(Exception e){ 
       //do something 
      } 
     } 

を次のコードを書いています。私はinputAnimalとimgAnimalの変数についても非常によく似たことをしています。ちょうど私がお互いの上にそれらを追加する方法について行くことができますか?私は単純に順次追加しようとしましたが、これはうまくいきません。事前に

おかげでこれらのグリッドの正方形のそれぞれの上に今

+1

あなたは2つのラベルを必要としません。 [OverlayIcon](http://stackoverflow.com/questions/17088599/how-to-combine-two-icons-in-java)が必要です –

答えて

2

は、多くの1つの項目と1匹の動物が存在することができます。 2つのJLabelを作成しました

OverlayLayoutを使用できます。同じパネル上のコンポーネントをZ軸に積み重ねることができます。

それとも、ただのコンポーネント間のSwingの親/子関係を利用している限り、親ラベルがレイアウトマネージャを使用すると、別のラベルにラベルを追加することができます。

animal.setLayout(new BorderLayout()); 
animal.add(item); 
gridSquare.add(animal); 
+0

Worked great、ありがとう –

関連する問題