【问题标题】:Java - Calling paint method from different class?Java - 从不同的类调用绘画方法?
【发布时间】:2014-10-20 18:31:01
【问题描述】:

我有一个扩展 JFrame 并创建一个窗口的类,它需要调用另一个类中的 paint() 方法。我知道如果它们在同一个类中, setVisible(true) 会调用paint方法,但由于它们在不同的类中,所以不会。我已经创建了 Die 类的对象(一幅画),但我不知道如何使用它们来调用 paint 方法。

这是创建窗口的类:

public class Game extends Frame 
{

    public void window()
    {   
        setTitle("Roll");   //  Title of the window
        setLocation(100, 100);          //  Location of the window
        setSize(900, 600);              //  Size of the window
        setBackground(Color.lightGray); //  Color of the window
        setVisible(true);               //  Make it appear and call paint

    }

对于另一个名为 Die 的类中的绘制方法,我使用了:

public void paint(Graphics pane)

【问题讨论】:

  • 一般回答:您需要在 Game 类中引用 Die,方法是调用构造函数 Die die = new Die(),然后调用绘制方法 die.paint() 或在您创建的 Die 类中paint() 方法 static 然后这样调用它 Die.paint()
  • @nem 已经尝试过第一个,第二个不起作用,因为我必须返回值?
  • paint() 方法具有 void 返回类型,因此在这两种情况下都不需要返回任何内容

标签: java swing class paint repaint


【解决方案1】:

如果我理解您的问题,您可以将 Die 实例传递给 Game 构造函数,例如

public class Game extends Frame {
  private Die die;
  public Game(Die die) {
    this.die = die;
  }
  public void window() {    
    setTitle("Roll");   //  Title of the window
    setLocation(100, 100);          //  Location of the window
    setSize(900, 600);              //  Size of the window
    setBackground(Color.lightGray); //  Color of the window
    setVisible(true);               //  Make it appear and call paint
    die.setVisible(true);           //  The same
  }
}

然后,无论您在哪里调用 new Game(),都会添加 Die 实例参数。这是在 Java(和其他 OOP 语言)中实现 callback 的一种相当常见的方式。

【讨论】:

  • 不确定我是否理解这一点。 Game 类有一个 Die。这个想法是我在 Game 类中多次调用 Die 类,它使用多种方法创建一个骰子以创建一个骰子。还要注意在Die类的paint方法之前有一个setup方法。
  • @John 是的。这建立了一个has-a关系。如果您已经有一个,那么您的问题毫无意义。如果你需要调用它多次也没关系,你已经有一个了。
  • 当我尝试创建一个新的 Game() 时,它告诉我构造函数 Game() 未定义。当我有新的 Game(Die) 时,它告诉我 Die 无法解析为变量。但我仍然不明白在 Die 类中我需要一个 new Game() 吗?
  • 传递Die 实例。 new Game(new Die()) 或您已初始化的 Die 实例... new Game(someInitializedDie)
  • 哦,我明白了。但是现在我在 main 方法中调用了什么?当我使用 Game myGameTable = new Game(); 时,它告诉我构造函数游戏未定义myGameTable.window();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
相关资源
最近更新 更多