2016-10-12 9 views
0

私は現在、キーボードのキーを使ってバックグラウンドイメージ上に矩形を移動するプログラムを作成しようとしています。私が直面している問題は、コンポーネントを描画するときに、単に背景画像の上に重なる代わりに、単に隣り合わせに配置されるということです。両方のコンポーネントを表示するコードは次のとおりです。コンポーネントが隣り合わせに表示されるのはなぜですか?

JLayeredPane panel = new JLayeredPane(); 
    panel.setLayout(new FlowLayout()); 
    add(panel); 

    paintBackground pb = new paintBackground(bimg); 
    panel.add(pb, 1, 0); 

    paintPlayer cc = new paintPlayer(startX, startY); 
    panel.add(cc, 2, 0); 

    pack(); 
    setVisible(true); 

paintPlayerコンポーネントがフルサイズに設定されていて、背景があるようです。私はただの長方形の大きさが、私は最初の2つの値を使用して四角形を移動することはできませんそのようにコンポーネントのサイズを設定することで、外出先に持っていた

public Dimension getMinimumSize() { 
    return new Dimension(800,600); 
} 

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(800,600); 
} 

@Override 
public Dimension getMaximumSize() { 
    return new Dimension(800,600); 
} 

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.red);   
    System.out.println(startX + startY); 
    g.fillRect(startX, startY, 30, 30); 
} 

:paintPlayerコンポーネントのコードは次のようになりますin fillRect。コンポーネント(800x600)で満たされた残りのスペースの背景は不透明であるようです。

追加すると、コンポーネントは次のように互いに表示されます。https://gyazo.com/57245c518e02778c36ffc89ba75d5a81。 paintBackgroundのpaintPlayer ontopを追加するにはどうすればよいのですか。背景画像の矩形だけを覆うようにします。

私はかなりの検索をしましたが、うまくいかないようです。おそらくレイアウトとは何か?私が気づいたもう一つのことは、これを行うことで、フレームやペインのどちらも、setBackgroundから恩恵を受けることはありません。 助けをお祈りします。

+0

これらのpaintBackgroundクラスとpaintPlayerクラスは何ですか?彼らは、あなたが書いたものが、(J)Componentを拡張しているのでしょうか? – Brion

+0

ええ、paintBackgroundは、JComponentを拡張してdrawImageを使用するクラスで、paintPlayerはJComponentを拡張する別のクラスです。混乱のために申し訳ありません –

+0

[ここ](http://stackoverflow.com/questions/27459783/using-jlayeredpane-to-add-multiple-jpanels-to-a-jpananel)を参照してください – asdf

答えて

1

これはJLayerdPaneのデフォルトコンストラクタです。

public JLayeredPane() { 
    setLayout(null); 
} 

通常のAbsolutLayoutを使用しています。あなたが読んだ場合here

注:これらのレイヤーは単なる論理的な構造物であり、LayoutManagerはレイヤーの設定に関係なくこのコンテナのすべての子コンポーネントに影響します。

何が間違っているか理解しておく必要があります。チェックOverlapLayout

関連する問題