【问题标题】:JTextField flashing white when typing键入时 JTextField 闪烁白色
【发布时间】: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 组件根本就不是为这样工作而设计的......

标签: java swing rendering


【解决方案1】:

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

每当我看到这样的评论时,我建议您查看Backgrounds With Transparency 以了解潜在问题和一些解决方案。

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

【讨论】:

    猜你喜欢
    • 2012-06-23
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2015-07-17
    • 2014-08-24
    相关资源
    最近更新 更多