为什么getHeight()和getWidth()在构造函数中返回0?我该如何避免呢?

时间:2016-02-25 21:54:03

标签: java graphics2d jcomponent

以下是我的代码,我正在尝试绘制一条从屏幕的一端延伸到另一端的线,但是当我调用getWidth()和getHeight()来创建一个线对象时,方法返回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));
}

2 个答案:

答案 0 :(得分:1)

因为组件尚未布局(它没有可定义的大小)。在将组件添加到另一个容器并验证该容器之前,组件不会被分配大小。

如何修复取决于多种因素,例如,您可以使用ComponentListener并监听componentResized事件,但是您想知道所有大小事件吗?当一个组件首次布局时,它可能会调整几次(不同大小),你关心哪一个?

答案 1 :(得分:0)

如果这是您的主要类,那么您首先必须设置大小并使其可见;否则宽度/高度没有意义:

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

在构造函数中。

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