Java 如果将当前对象传递给另一个对象';s Graphics2D,它会在当前对象上绘制吗?

Java 如果将当前对象传递给另一个对象';s Graphics2D,它会在当前对象上绘制吗?,java,swing,jpanel,graphics2d,Java,Swing,Jpanel,Graphics2d,例如,我有一个扩展JPanel的类A,我想将它的Graphics2D传递给类B。如果我在类B中的Graphics2D实例上执行操作,它会在类A上绘制吗 public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; ... b.doSomePainting(g2d); ... } 是。你会怎么想呢?您所做的只

例如,我有一个扩展JPanel的类A,我想将它的Graphics2D传递给类B。如果我在类B中的Graphics2D实例上执行操作,它会在类A上绘制吗

  public void paintComponent(Graphics g){
     super.paintComponent(g);
     Graphics2D g2d = (Graphics2D)g;
     ...
     b.doSomePainting(g2d);
     ...
  }

。你会怎么想呢?您所做的只是将类
A
Graphics2D
对象的绘制委托给类
B
。就这么简单。

这里没有真正的问题,1)你想从B->A克隆自定义绘画,2)你想从B->A传递绘画,3)其他东西,我有我的面板(A),我想拆分A的功能,这样B可以完成所有动画,但仍然在A上绘画。这有意义吗?通过@trashgod,有很多模型->控制器->视图(MVC)的例子,但是这一个是最好的,就像我在上几个月看到的那样哦,所以你有一个控制面板,分别管理显示面板和它背后的逻辑?这实际上很有道理,但并没有真正解决这个问题。我99%确定,我想测试它会很容易。我只是想检查一下,因为可能有一些特殊的规则表明情况并非如此。谢谢。需要注意的一点是,当您创建
Graphics2D
对象时,您应该执行以下操作-
Graphics2D g2d=(Graphics2D)g.create()
。这将有效地创建
Graphics
对象的副本。为什么这比仅强制转换它要好呢?有时您已经有了一个
Graphics
对象,您希望暂时更改其某些状态,然后将其恢复到原始状态。一种方法是创建一个新的
图形
对象,该对象是原始对象的副本,并对该副本进行更改。这种技术避免了破坏原始对象的状态,而swing的其他部分可能会错误地依赖于原始对象的状态。作为参考,它将MVC与委托相结合;请参见
RCView
中的
paintComponent()