Java:创建全局图形对象

Java:创建全局图形对象,java,swing,graphics2d,Java,Swing,Graphics2d,我已经扩展了JPanel类来绘制图形。我遇到的问题是,我需要一个全局图形对象,以便在多个方法中调用它。。。举个例子,我想做的是: public class Graph extends JPanel { private Graphics2D g2d; public void paintComponent(Graphics g){ g2d = (Graphics2D)g; } public void drawGridLines(int hor, int vert){

我已经扩展了JPanel类来绘制图形。我遇到的问题是,我需要一个全局图形对象,以便在多个方法中调用它。。。举个例子,我想做的是:

public class Graph extends JPanel {
  private Graphics2D g2d;

  public void paintComponent(Graphics g){
    g2d = (Graphics2D)g;
  }

  public void drawGridLines(int hor, int vert){
    g2d.someLogicToDrawMyGridLines(someparams);
  }
}

这将返回一个空指针异常-所以我的问题是:如何创建全局图形对象?这种情况下的最佳做法是什么?

我的建议是:

public class Graph extends JPanel {
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g2d = (Graphics2D) g;
        drawGridLines(g2d, ......);
    }

    private void drawGridLines(Graphics2D g2d, int hor, int vert){
        g2d.someLogicToDrawMyGridLines(someparams);
    }
}
i、 e.将图形上下文的所有用法保留在
paintComponent
调用中

如何从外部传入图形对象


不要。图形上下文仅在调用
paintComponent()
期间有效。相反,请使用所讨论的来更新通知任何侦听视图进行自身渲染的模型。这是一个完整的示例。

为什么需要全局图形对象?为什么不能从内部调用
drawGridLines
并将
Graphics
作为参数传递呢?这就是我现在得到的-但是如果我要调用drawGridLines()这是一个好的解决方案吗从另一个类?最好将
图形
对象传递给您的助手函数,而不是尝试存储一个可能被丢弃且不再可用的
图形
对象……如何在外部传递图形对象?+1用于分解;中的相应方法可以在的实现中的各种
drawXxx()
方法中看到。