我正在此JPanel
内绘制形状,这也是另一个主JPanel
内的形状。在repaint()
,它只绘制一毫秒的形状然后消失。他们不留画,为什么?
我的paintComponent
方法是这样的
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < reportElements.size(); i++) {
this.reportElements.get(i).display((Graphics2D) pageComponents.get(i).getGraphics());
}
}
如果父级是启用了JEditorPane
的{{1}},它就可以工作,我们可以看到形状但是当它是setEditable()
时,在一毫秒后我看到的只是空面板。< / p>
答案 0 :(得分:3)
你应该绘制到JPanel的Graphics对象,因为它是永久的...在你的例子中,那是Graphics g
...
答案 1 :(得分:2)
ultrajohn已经死了。您需要使用已通过的Graphics
。请继续阅读原因......
Java 1.6引入了支持重绘请求优化的RepaintManager
。它对绘画有一些微妙的影响。
在这种情况下,您正在使用多个Graphics2D对象:传递到g
的{{1}}和paintComponent
调用返回的值。
重绘经理已经递给你getGraphics
画画。注意:这不会在屏幕上绘制,而是在临时缓冲区上绘制(假设默认为双缓冲)。
在g
调用中,您正在绘制从各个组件的paintComponent
获取的图形。这绕过重绘管理器并直接绘制到无缓冲显示器。
当getGraphics
返回时,paintChildren
开始处理更新双缓冲区。它在显示的缓冲区上绘制空白临时缓冲区,有效地擦除从RepaintManager
答案 2 :(得分:2)
在这种情况下会发生什么 pageComponents,小型JPanels?该 父母小组不会画出来的 它们上面的形状是什么?
我不确定我是否同意你的意见。您的主面板应包含子面板。应使用布局管理器将子面板添加到主面板。然后,当Swing决定重新绘制主面板时,它还将重新绘制所有子面板,然后子面板将重新绘制形状。
它的价值Custom Painting Approaches有一个在面板上绘制形状的工作示例。
答案 3 :(得分:0)
可能是paintChildren
或paintBorder
透支了您在方法中绘制的内容。或许尝试覆盖paint
。在那里,您可以完全控制组件上的内容,您可以自行决定是否进一步调用paintComponent
,paintChildren
或paintBorder
。