假设我有一个对象mainPanel扩展JPanel,并在其中另一个对象internaPanel扩展Jpanel。
在mainPanel的paintComponent()方法中,我在我的Graphics对象上使用了translate()方法,它也应该改变我的internaPanel图形上下文的来源。它确实如此,只要我在需要时调用mainPanel上的repaint()方法。但问题是,有时我的internaPanel被迫自己重新绘制 - 例如当我更改其不透明参数时。当发生这种情况时,internaPanel显然出现在JFrame的错误部分。
如何防止这种情况发生?有没有办法检查internaPanel paintComponent()方法的Graphics参数是否来自mainPanel(如果它已被翻译)?
谢谢!
答案 0 :(得分:2)
当您在两个组件之间存在父/子关系时,不确定为什么要使用Graphics translate(...)方法。在进行自定义绘画时使用图形转换。
当您处理Swing组件时,您应该使用布局管理器并让布局管理器在每个组件上调用setLocation(...)
方法,以便相对于父组件绘制子项。
您不应尝试自行管理该位置。有关详细信息,请阅读Layout Managers上的Swing教程中的部分。
答案 1 :(得分:1)
你的问题是你有一些代码可以在paintComponent方法中改变你的GUI对象的状态,这是你永远不应该做的,因为你发现:你没有完全控制何时甚至是画会发生。
解决方案是在paintComponent之外更改对象状态,然后在paintComponent中使用该状态(字段)。
有关详细信息,请显示更多(部分!)代码。