首页 > Java > java教程 > 在 JPanel 上组合 JTextField 和动画绘图时,如何防止 Swing 的线程问题?

在 JPanel 上组合 JTextField 和动画绘图时,如何防止 Swing 的线程问题?

Linda Hamilton
发布: 2024-12-31 20:54:14
原创
161 人浏览过

How Can I Prevent Swing's Threading Issues When Combining JTextFields and Animated Drawing on a JPanel?

JPanel 上活动绘图之上的 JTextFields:线程问题

假设您想在可以添加哪些 Swing 用户界面元素。这涉及到在不需要更新每一帧的背景上对红色矩形进行动画处理。相反,背景被渲染到 BufferedImage 上,并且仅重绘了清除矩形先前位置所需的部分。

但是,在将 JTextField 添加到 JPanel 并关注它之后,清除了先前的位置每次光标闪烁时矩形的失败。这是因为 Swing 不是线程安全的,并且图像是异步绘制的。

要解决此问题,您需要调用超类的方法并在 PaintComponent() 方法中删除旧的绘制:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    int width = this.getWidth();
    int height = this.getHeight();
    g.setColor(Color.black);
    g.fillRect(0, 0, width, height);
    ...
}
登录后复制

或者,您可以根据需要简化代码并进行优化。例如,您可能不需要使用插入、额外缓冲区或组件侦听器。

附录:

在构造函数中设置背景颜色就不需要使用在paintComponent()中填充面板,而super.paintComponent()允许文本字段正常工作。如前所述,这种解决方法很脆弱。最好简化代码并根据需要进行优化。

附录 2:

super.paintComponent() 调用 UI delegate 的 update() 方法,该方法填充如果其 opaque 属性为 true,则指定组件及其背景颜色。您可以使用 setOpaque(false) 来防止这种情况。

以上是在 JPanel 上组合 JTextField 和动画绘图时,如何防止 Swing 的线程问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板