2016-10-12 14 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組件設置爲全尺寸,並且似乎有背景。該paintPlayer組件代碼看起來是這樣的:

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); 
} 

我在設置組件的大小隻是矩形的大小有一展身手,但這樣我可以不使用前兩個值移動矩形在fillRect中。由組件(800x600)填充的其餘空間的背景似乎不透明。

添加時,組件只是相鄰顯示,如下所示:https://gyazo.com/57245c518e02778c36ffc89ba75d5a81。我如何着手在paintBackground的頂部添加paintPlayer,以便它只覆蓋背景圖像上的矩形。

我已經做了一點搜索,但我似乎無法解決。也許與佈局有關?我注意到的另一件事是,通過這樣做,框架或窗格都不會從setBackground中受益,因爲它不可見。 歡呼任何幫助。

+0

這些paintBackground和paintPlayer類是什麼?他們是否寫了擴展(J)組件? – Brion

+0

是的,paintBackground只是一個擴展JComponent並使用drawImage的類,而paintPlayer是擴展JComponent的另一個類。對不起,混淆 –

+0

請參閱[這裏](http://stackoverflow.com/questions/27459783/using-jlayeredpane-to-add-multiple-jpanels-to-a-jpanel) – asdf

回答

1

這是JLayerdPane的默認構造函數。

public JLayeredPane() { 
    setLayout(null); 
} 

您會看到它正常使用AbsolutLayout。如果你讀here

注:這些層只是一個邏輯結構和佈局管理將影響此容器的所有子組件,而不必爲圖層設置方面。

你應該明白什麼是錯的。檢查OverlapLayout