【问题标题】:getWidth not working correctly as class variablegetWidth 不能作为类变量正常工作
【发布时间】:2014-06-10 11:04:07
【问题描述】:

我对java(和一般编程)非常陌生,我试图制作一个简单地在屏幕中心画一条垂直线的程序。为此,我创建了一个变量x,它为我提供了屏幕中心的 x 坐标。我希望能够在其他私有方法中使用这个变量。然而,当我运行代码时,没有出现任何行,好像 x 被设置为 0。

import acm.graphics.*;
import acm.program.*;
import java.awt.*;

public class Target extends GraphicsProgram {   
    int x = getWidth()/2;
    public void run() {
        GLine line = new GLine (x,0,x,300);
        add (line);
    }
}

如果我把我的变量x 放在下面的run() 方法中,这条线会正确绘制,但是我稍后将无法在其他私有方法中使用它,因为据我了解,然后变量将不再是类变量而是实例变量,因此只能由run() 访问,而不能由其他方法访问?

public class Target extends GraphicsProgram {   
   public void run() {
        int x = getWidth()/2;            
        GLine line = new GLine (x,0,x,300);
        add (line);
    }
}

有人能告诉我为什么第一个代码不起作用而第二个代码起作用吗? 非常感谢您!

【问题讨论】:

  • 我相信这与图形的生命周期有关。必须在实例初始化程序运行后设置宽度。
  • @Sotirios Delimanolis 谢谢你的回答,但我想我不太明白。如果“生命周期”是指图形在一段时间后“过期”(如果我假设错误,请纠正我,请原谅我的外行语言),为什么不能将 getWidth() 的当前值分配给 x 和完成了吗?不过感谢您的快速回复!
  • 正如 zjor 在下面回复的那样,GUI API 必须先实例化您的类,然后才能为其字段分配任何值。 getWidth() 在实例字段初始化表达式将在 GUI 框架可以做任何事情之前运行,即。还不能设置宽度。

标签: java class variables inner-classes acm.graphics


【解决方案1】:

在第一个版本中,getWidth() 在实例初始化期间被调用,并且您的窗口边界可能尚未设置。所以它仍然有效,但该方法返回 0,您可能在屏幕上看不到这条线。

【讨论】:

  • 对,多亏了你自己和@Sotirios Delimanolis,我想我现在明白了这个问题。为了解决这个问题,我首先在类中声明了x,然后在run() 实例中分配了getWidth()/2
猜你喜欢
  • 2013-03-30
  • 2014-01-04
  • 1970-01-01
  • 2016-11-26
  • 2022-01-12
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多