Java:创建全局图形对象

J S*_*ith 0 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){
    g2d.someLogicToDrawMyGridLines(someparams);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

khe*_*ood 5

我的建议是这样的:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

即在paintComponent调用中保留图形上下文的所有用途.


tra*_*god 5

我如何在外部传递图形对象?

别.图形上下文仅在调用期间有效paintComponent().相反,使用此处讨论的MVC模式来更新通知任何侦听视图呈现自身的模型.是一个完整的例子.JFreeChart