有没有办法找出图形是否被翻译?

时间:2015-12-18 23:16:46

标签: java swing

假设我有一个对象mainPanel扩展JPanel,并在其中另一个对象internaPanel扩展Jpanel。

在mainPanel的paintComponent()方法中,我在我的Graphics对象上使用了translate()方法,它也应该改变我的internaPanel图形上下文的来源。它确实如此,只要我在需要时调用mainPanel上的repaint()方法。但问题是,有时我的internaPanel被迫自己重新绘制 - 例如当我更改其不透明参数时。当发生这种情况时,internaPanel显然出现在JFrame的错误部分。

如何防止这种情况发生?有没有办法检查internaPanel paintComponent()方法的Graphics参数是否来自mainPanel(如果它已被翻译)?

谢谢!

2 个答案:

答案 0 :(得分:2)

当您在两个组件之间存在父/子关系时,不确定为什么要使用Graphics translate(...)方法。在进行自定义绘画时使用图形转换。

当您处理Swing组件时,您应该使用布局管理器并让布局管理器在每个组件上调用setLocation(...)方法,以便相对于父组件绘制子项。

您不应尝试自行管理该位置。有关详细信息,请阅读Layout Managers上的Swing教程中的部分。

答案 1 :(得分:1)

你的问题是你有一些代码可以在paintComponent方法中改变你的GUI对象的状态,这是你永远不应该做的,因为你发现:你没有完全控制何时甚至是画会发生。

解决方案是在paintComponent之外更改对象状态,然后在paintComponent中使用该状态(字段)。

有关详细信息,请显示更多(部分!)代码。

相关问题