2015-11-15 58 views
1

我定義我自己的JLayeredPane派生類:嵌套的JLayeredPane不能正常呈現

public class Decoration extends JLayeredPane { 

    private int x, y; 
    private boolean hiDef; 
    private boolean[] region; 

    public Decoration(boolean h, int x1, int y1){ 
     super(); 

     setPreferredSize(new Dimension(128, 128)); 
     x = x1; 
     y = y1; 
     hiDef = h; 

     region = selectRegions(); 

     JLabel labelN = new JLabel(); 
     labelN.setIcon(new javax.swing.ImageIcon("./resources/lgTree2.png")); 
     this.add(labelN, new Integer(1)); 

     this.setOpaque(false) 
    } 
} 

然後我嘗試把這個另一JLayeredPane的內部:

JPanel panelMain = new JPanel(); 
panelMain.setLayout(new BorderLayout()); 
getContentPane().add(panelMain); 
JLayeredPane gameGrid = new JLayeredPane(); 
gameGrid.setLayout(new GridBagLayout()); 
panelMain.add(gameGrid); 
Decoration decor = new Decoration(hiDef, j, k); 
gameGrid.add(decor, c, 9); 

遺憾的是沒有被繪製在屏幕上。當我直接添加JLabel而不是JLayeredPane時,它工作正常。這是因爲將JLayeredPane嵌套在另一個JLayeredPane中,並將JLabel放置在頂層JLayeredPane與較低層JLayeredPane之間有什麼不同?

+1

通常的setBounds,JLayeredPane的沒有一個佈局管理器,讓你成爲負責確保組件的大小和位置。你嘗試使用你選擇的佈局管理器,所有使用setBounds的子組件 – MadProgrammer

+0

@MadProgrammer修復它,你可以發佈它作爲答案? –

回答

1

通常,JLayeredPane沒有佈局管理器,因此您需要負責確保組件的大小和位置。

您嘗試使用您所選擇的佈局管理器,或使用子組件