2015-12-18 49 views
-2

我们假设我有一个扩展JPanel的对象mainPanel,并在其内部扩展了Jpanel的另一个对象internaPanel。有没有办法找出Graphics是否被翻译?

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

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

谢谢!

+1

请显示一些代码! – hzpz

+0

................代码?? –

回答

1

你的问题是你的代码改变了你的GUI对象在paintComponent方法中的状态,而你永远不应该这样做,因为你发现了这个原因:你没有完全控制何时甚至是否绘画将会发生。

解决的办法是改变paintComponent外部的对象状态,然后在paintComponent中使用该状态(字段)。

有关更多详情,请显示更多(某些!)代码。

2

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

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

您不应该尝试自己管理位置。有关更多信息,请参阅Layout Managers上的Swing教程部分。

相关问题