【发布时间】:2012-12-04 22:00:36
【问题描述】:
我有一个绘制形状并允许选择这些形状的 JPanel。我开始添加使用 AffineTransform 对象以及 Graphics2D 对象来转换此视图的功能。
在我的 paint() 方法中,当然传入了一个 Graphics 对象。我在该对象上设置了一个新的变换(在这种情况下,只是将事物缩放 2),并且 paint() 方法中的所有内容都根据到我刚刚设置的 AffineTransform。在这一点上,绘图形状部分效果很好!现在开始选择形状...
形状选择在 mousePressed() 事件中开始(我的 JPanel 实现了 MouseListener 接口)。当我有一个 mousePressed() 事件时,我调用 this.getGraphics() 来获取 JPanel 的 Graphics 对象。然后我将它转换为 Graphics2D 对象并在其上调用 getTransform() 以获取我当前的变换,以便我可以将单击的点映射到变换的点。然而,当我调用 getTransform() 时,AffineTransform 又回到了 [1, 0, 0], [0, 1, 0] 的默认 AffineTransform。
我在想也许传递给 JPanel 的 paint() 的 Graphics 对象与我在 JPanel 中的对象不同,但我不确定。有谁知道这里发生了什么?
【问题讨论】:
标签: java swing jpanel graphics2d affinetransform