2016-02-25 77 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); 

在构造函数中。

如果这不是您的主要类,并且它被添加到其他组件,那么您必须将线条图移动到该类。

相关问题