2016-09-23 26 views
0

如果我有一個動態添加JLabel的偵聽器,是否有辦法強制組件立即出現?如何強制Jcomponent出現在Java中?

我正在一個項目,我有一個ArrayList存儲每個動態添加的標籤。我有另一種涉及在面板上畫線的方法。這取決於新的JLabel位置(x和y)。下面是我的聽衆中的代碼:

panel.add(labelArrayList.get(index)); 
panel.repaint(); 
panel.revalidate(); 

drawLine(); 

其中,drawLine()是一種僅在面板上繪製單行的方法。

private void drawLine(){ 
    /*Draw from (x1,y1) to (x2,y2), where (x1,y1) is fixed at original and (x2,y2) is the location of the newly added JLabel*/ 
    graphics2d.drawLine(x1, y1, x2, y2); 
} 

當我處於調試模式時,我看到在調用repaint()和revalidate()後沒有添加該項目。因此,我無法獲取新添加的標籤的位置。在調用drawLines()方法後出現新的JLabel。

我希望在調用drawLine()之前添加新標籤。有什麼辦法可以使它工作嗎?

+1

此代碼位於監聽器中?老實說,在一個監聽器中直接畫一條線是很奇怪的,這種情況通常發生在paintComponent()方法中。你的主要問題可能更多地與不採取Swing方式的事情有關。 – Gimby

回答

0

調用doLayout()(而不是repaint()revalidate())會這樣做。