![](/img/trans.png)
[英]Why do getWidth() and getHeight() return 0 before paintComponent() is called?
[英]Why does getHeight() and getWidth() return 0 in the constructor? and how do I avoid that?
以下是我的代码,我试图绘制一条从屏幕一端延伸到另一端的线,但是当我调用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));
}
因为该组件尚未布置(它没有可定义的大小)。 在将组件添加到另一个容器并验证该容器之前,不会为组件分配大小。
如何修复取决于许多因素,例如,您可以使用ComponentListener
并侦听componentResized
事件,但是您是否想了解所有大小事件? 首次布置组件时,它可能会调整几次大小(以不同的大小),您在乎哪一个?
如果这是您的主要课程,那么您首先必须设置尺寸并使其可见。 否则,宽度/高度是没有意义的:
setSize(100, 100);
setVisible(true);
在构造函数中。
如果这不是您的主类,并且已添加到其他组件,则必须将线条图移到该类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.