【发布时间】:2014-01-03 04:49:38
【问题描述】:
我正在自己的渲染循环中使用 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 上运行的。
【问题讨论】:
-
以这种方式混合重量级和重量级的组件,特别是不强烈推荐使用 BufferStrategy。基于 AWT 的组件对透明度的反应不佳......
-
是的,但您甚至是最初向我推荐该教程的人。但是,如果是这种情况,您会建议使用严格的 AWT 组件吗?
-
是的。正如我之前所说,Swing 组件根本就不是为这样工作而设计的......