【问题标题】:Reset Graphics2D object in Java在 Java 中重置 Graphics2D 对象
【发布时间】:2013-12-20 09:35:57
【问题描述】:

我在 Java 中试验 Graphics2D。但像往常一样,我被困住了。 :P 问题是: 假设我有这段代码,

Graphics2D g=(Graphics2D)(this.getGraphics()); //Inside a JFrame
g.rotate(Math.PI/8);
g.drawLine(10, 20, 65, 80);

//I want this one and all following lines to be drawn without any rotation
g.drawLine(120, 220, 625, 180);

有可能吗???我知道一定有某种方法,但我无法弄清楚。请帮忙。

【问题讨论】:

    标签: java swing graphics2d


    【解决方案1】:

    您要做的是恢复转换。

    试试

    AffineTransform oldXForm = g.getTransform();
    g.rotate(...);
    g.drawLine(...);
    
    g.setTransform(oldXForm); // Restore transform
    g.drawLine(...);
    

    【讨论】:

    • 此外,建议您使用图形对象的副本,而不是图形对象本身,以避免破坏,因为这将在其他地方使用。
    • 你能解释一下吗?你说的破坏是什么意思?
    • 有时你已经有一个Graphics 对象,你想暂时改变它的一些状态,然后把它恢复到原来的状态。一种方法是创建一个新的Graphics 对象,它是原始对象的副本,并改为对该副本进行更改。这种技术避免破坏原始对象的状态,而 Swing 的其他部分可能依赖于原始对象的状态。它可能不适用于这种情况,但我认为提及它不会有什么坏处! :)
    • 通常更喜欢制作副本而不是修改和恢复,主要是出于性能原因。
    • 你可以使用 affineTransform.setToIdentity();而不是使用 oldXForm。
    【解决方案2】:

    调用getTransform()(给你一个副本),旋转,绘制,然后使用setTransform()恢复状态。 docs for setTransform() 甚至有一个例子。

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 2011-01-27
      • 2013-03-06
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      相关资源
      最近更新 更多