2016-04-22 37 views
-1

我試圖將JPanel添加到另一個JPanel,並將其放置在第一個JPanel的特定位置。我正在用setBounds(x, y, w, h)來做這件事。現在我知道我不應該這樣做,但我需要一種方式來移動它(作爲動畫)。JPanel setbounds

我遇到的問題是Y不起作用。如果我做getBounds()它被設置爲正確的值,但它不會在屏幕上移動。我的Layout設置爲null

首先JPanel

public WarehousePanel() 
{ 
    super(null); 

    gantries = new Gantry[5]; 

    for (int i = 0; i < gantries.length; i++) 
    { 
     gantries[i] = new Gantry(3); 
     add(gantries[i]); 
     System.out.println(gantries[i].getY()); 
     gantries[i].setBounds(15 * (i + 1), 100, 10, 50); 
     System.out.println(gantries[i].getBounds()); 
    } 
}' 

JPanel:提前

public Gantry(int y) 
{ 
    this.y = y; 

    packageY = new ArrayList(); 

    setBackground(Color.red); 
    setPreferredSize(new Dimension(10, 50)); 
} 

感謝。

+0

'gantries [i] .setBounds(15 *(i + 1),100,10,50);'Y不變。 – Tin

+0

正確,屏幕上的Y仍然是5. – javaNoobsForever

+0

我的意思是我沒有看到你正在移動Y座標。另外如果你想看動畫,你可能需要添加像Thread.sleep(毫秒)這樣的延遲。如果你不添加延遲,你只會看到最後一個值 - 你不會看到在循環內改變值。循環後,屏幕只呈現jframe。 – Tin

回答

0

或許可以考慮使用未裝飾JInternalFrame?這將做你想做的事情,而不是大驚小怪。另外,使用setBounds而不是佈局管理器通常被認爲是一個壞主意。

如果您絕對肯定會決定以這種方式做事,那麼您確定要調用組件類的重繪方法as per spec

最後,你確定父級JPanel的大小足夠大以容納子組件上的setBounds調用嗎?

0

正確的,Y在屏幕上仍然顯得5

這告訴我,你仍在使用默認的FlowLayout的面板。

如果我將getBounds()設置爲正確的值rk。

是的,但是您在賦值後立即顯示值。那不會告訴你任何事情。您需要在框架可見後顯示界限。使框架可見將調用佈局管理器。

因此仔細檢查以確保您使用的是空佈局。

如果這沒有幫助,然後張貼您的SSCCE,說明問題。因此,創建一個JFrame並將佈局設置爲null。然後創建一個JPanel,設置邊界和背景,並將面板添加到框架。向自己證明基本的代碼作品。然後確定與工作代碼和代碼有什麼不同。