输入时JTextField闪烁白色

时间:2014-01-03 04:49:39

标签: java swing rendering

我正在我自己的渲染循环中使用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上运行。

1 个答案:

答案 0 :(得分:0)

  

然而,当任何组件透明时,奇怪的事情就会开始发生。

每当我看到类似的评论时,我建议您查看Backgrounds With Transparency是否存在潜在问题和一些解决方案。

基本上,因为背景是透明的,所以你需要使组件不透明,以便首先绘制其父项背景,然后你需要进行自定义绘画来绘制组件背景。