gpt4 book ai didi

Java Applet 在 focusLost 和 focusGained 上闪烁

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:33 25 4
gpt4 key购买 nike

我在网页中嵌入了一个 Java JApplet。JApplet 窗口包含扩展 JPanel 的类的单个实例 - 与 JApplet 大小相同。当用户单击面板中的按钮时,小程序可以生成弹出窗口 (JFrame)。

每次我单击按钮弹出窗口时,我的小程序都会在重新绘制时闪烁。当我再次单击它或当它获得焦点并单击不同的窗口时,它也会执行相同的操作 - 我的结论:这是在 focusLost() 和 focusGained() 事件上强制进行的重绘。

我正在面板的paint()方法中实现双缓冲,如下所示:

@Override
public void paint(Graphics g)
{
if(resized)
{
offscreen = createImage(getWidth(),getHeight());
resized = false;
}

Graphics offscreenG = offscreen.getGraphics();

/// DRAW HERE:

// paint the main window contents:
view.paint(offscreenG);
// paint the child components of our panel.
super.paint(offscreenG);

/// FRAW FINISHED

g.drawImage(offscreen,0,0,this);
offscreenG.dispose();
}

View 对象不是一个 swing 组件,而只是一个知道将所有内容绘制到 Graphics 对象上的类。

JApplet 的paint() 方法未被重写。

我可能可以重写 JApplet 的 focusGained/focusLost 方法来防止重新绘制 - 但我宁愿听到更好的问题解决方案。

最佳答案

不需要实现双缓冲,这是由 Swing 自动完成的。构建小程序的方式与构建应用程序的方式相同。也就是说,您将组件添加到 JApplet 的内容 Pane 中。

如果您必须进行自定义绘制,那么您可以重写 JPanel 的 PaintComponent() 方法并将面板添加到小程序中。

阅读 Swing 教程中关于 Custom Painting 的部分例如。

关于Java Applet 在 focusLost 和 focusGained 上闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com