2010-04-07 93 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