2016-02-25 75 views
0

以下是我的代碼,我試圖畫出一條從屏幕一端延伸到另一端的線,但是當我調用getWidth()和getHeight()創建線對象時,方法返回0.爲什麼是發生這種情況,我如何避免這種情況。爲什麼getHeight()和getWidth()在構造函數中返回0?我如何避免這種情況?

public class LineComponent extends JComponent { 

private Shapes shape; 

public LineComponent() { 
    shape = new Line((int) Math.round(Math.sqrt(getHeight() * getHeight() + getWidth() * getWidth())) 
,new Point(getWidth()/2, getHeight()/2)); 
} 

回答

1

因爲組件尚未佈置(它沒有可定義的大小)。在將組件添加到另一個容器並驗證該容器之前,組件不會被分配一個大小。

如何解決取決於多種因素,例如,您可以使用ComponentListener並收聽componentResized事件,但是您是否想知道所有大小事件?當組件第一次佈局時,它可能調整了幾次(到不同的大小),你關心哪一個?

+0

我需要調整我的組件大小,並且在第一次佈置時我需要知道原始大小。有沒有辦法避免使用ComponentListener – Mike

+1

您所擁有的「最佳」解決方案是通過重寫它的getPreferredSize方法來定義組件的preferredSize。儘管如此,我們不能保證該組件將按照這個尺寸進行佈局,但它會給你一個起點。 – MadProgrammer

0

如果這是您的主類,那麼您首先必須設置尺寸並使其可見;否則對於什麼寬度/高度是沒有意義的:

setSize(100, 100); 
setVisible(true); 

在構造函數中。

如果這不是您的主要類,並且它被添加到其他組件,那麼您必須將線條圖移動到該類。

相關問題