我正在我自己的渲染循环中使用BufferStrategy进行主动渲染。这是处理重新绘制的方法。
public void handleRepaint() {
try {
Graphics g = buffer.getDrawGraphics();
render(g);
g.dispose();
if (!buffer.contentsLost()) {
buffer.show();
}
} catch (IllegalStateException e) {
}
}
显示render(Graphics g)
方法的详细信息有点不必要。基本上我正在进行自定义重新绘制,然后调用contentPane.paintComponents(Graphics g)
,将contentPane
作为JFrame
的内容窗格,投射到JComponent
。
当组件不透明时,这非常有效。但是,当任何组件透明时,奇怪的事情就会开始发生。例如,如果我创建JButton
并将其添加到JPanel
,则当鼠标进入/存在时,按钮的背景偶尔会闪烁白色。当我添加JTextField
时,键入有时会导致整个文本字段闪烁白色。
我无法弄清楚发生了什么。它显然与活动渲染有关,但我无法弄清楚它是什么。即使使用the tutorial I used,当我将JButtons
中的任何一个设置为透明时也会发生同样的事情。
我对如何解决这个问题感到很茫然。使用按钮,禁用翻转工作,但我不希望禁用翻转。使用JTextFields
和其他组件,不会禁用翻转,我不能只禁用输入。
因此,如果有人有解决方案,请帮助。
PS:swing组件的重绘代码都在EDT上运行。
答案 0 :(得分:0)
然而,当任何组件透明时,奇怪的事情就会开始发生。
每当我看到类似的评论时,我建议您查看Backgrounds With Transparency是否存在潜在问题和一些解决方案。
基本上,因为背景是透明的,所以你需要使组件不透明,以便首先绘制其父项背景,然后你需要进行自定义绘画来绘制组件背景。