2010-04-07 92 views
0

我有一個抽象的實體:問題延伸的JPanel

public abstract class Entity extends JPanel implements FocusListener 

而且我有一個TextEntity:

public class TextEntity extends Entity 

內TextEntity的構造我想提出一個JTextArea,將覆蓋面板:

textArea = new JTextArea(); 
textArea.setSize(getWidth(),getHeight()); 
add(textArea); 

但是getWidth()getHeight()返回0.是否有問題繼承或構造函數?

回答

3

Shuldn​​'t是一個繼承問題。 可能在構造函數中JPanel不會有大小。

+0

你是對的。它尚未添加。我現在明白了,謝謝 – Halo 2010-04-07 12:44:54

0

根據佈局的不同,您需要設置嵌入式組件的首選/最小/最大尺寸,以便組件計算實際尺寸。

1

嘗試使用某些LayoutManager來處理面板內部組件的大小調整。例如BorderLayout,並將textarea添加到中心。

像這樣的東西(它已經有幾年,因爲我編寫的Swing):

textArea = new JTextArea(); 
textArea.setSize(getWidth(),getHeight()); 
setLayout(new BorderLayout()); 
add(textArea, BorderLayout.CENTER); 

現在,當你在面板可見,佈局管理器應該保持textarea的大小相同的護理面板。還要確保在面板中沒有任何邊框。

+0

如果我使用佈局,我不會有「在父面板甚至存在之前添加子項」的問題嗎? – Halo 2010-04-07 15:12:06

+0

父面板(TextEntity)存在,但該面板尚未擁有父面板。將TextEntity添加到其他容器時,該容器的佈局管理器將依次管理TextEntity的邊界。等等,直到你有最頂層的父類,比如JFrame或者某些可見和邊界集。 – fish 2010-04-08 06:59:22