当前位置: 首页 > 面试题库 >

.setVisible(true)立即重绘

殷耀
2023-03-14
问题内容

在一个简短的方法中,我使用setVisible(false)隐藏了一个JFrame。然后,截屏并使用setVisible(true)还原JFrame。

在再次显示之后,窗口应该显示与以前不同的图片(可以说是截图的一部分)。

问题是,在调用setVisible(true)之后,将窗口与旧内容一起闪烁一秒钟,然后再调用paintComponent并绘制更新的状态。

我可能会以丑陋的方式解决此问题,但我想知道是否有更好的解决方案。

预先感谢您的任何帮助

编辑:在准备示例时,我注意到当不像我在程序中那样使用透明性时,几乎无法观察到这种效果。应该可能已经提到了。这是我想出的:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JPanel;

import com.sun.awt.AWTUtilities;
public class Test {

    static boolean flag = false;
    static Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();

    public static void main(String[] args) throws InterruptedException {
        JFrame frame = new JFrame();
        frame.setUndecorated(true);
        AWTUtilities.setWindowOpaque(frame, false);  //draw on a transparent window
        frame.setSize(scrSize.width, scrSize.height);
        frame.setContentPane(new JPanel() {
            protected void paintComponent(Graphics g) 
            {
                if (Test.flag) {
                    g.setColor(Color.RED);
                    g.drawRect(50, 50, scrSize.width - 100, scrSize.height - 100);
                }
                else {
                    g.setColor(Color.GREEN);
                    g.fillOval(50, 50, scrSize.width - 100, scrSize.height - 100);
                }
            }
        });
        frame.setVisible(true); //green oval shown
        Thread.sleep(1000);
        frame.setVisible(false);
        flag = true; // next draw produces red rectangle
        Thread.sleep(1000);
        frame.setVisible(true); // before the next draw, 
                                // you can see a flash of the green oval
    }

}

问题答案:

我意识到在提出问题一年后就提出了这个答案,但是我遇到了类似的问题,当然在进行尝试之前进行了一些研究。对于遇到此问题的任何人,请在包装并使其可见之前尝试摆放窗户/框架。



 类似资料:
  • 问题内容: 我使用Netbeans GUI Builder创建了一个GUI(称为ParameterUI),现在我想创建它的一个实例并显示它。但是,使用 不会导致任何窗口出现…测试表明,在这些命令之后,gui.isVisible()返回true,但是gui.isValid()为false。调用gui.revalidate()也无效。 在ParameterUI类中,构造函数方法由Netbeans生成,

  • 我正在使用AppBarLayout中的android:animateLayoutChanges=“true”为我的表格布局设置动画。但当我出发的时候。setVisibility(View.GONE),我的片段的容器会立即上升到ActionBar,持续几毫秒。然后它返回到TabLayout的末尾,并上升到ActionBar。我在下面的gif中解释了这一点。 按钮理论与实践背后的TabLayout由于

  • 我有两个类:类jDialog和JFrame 知道如何保持jDialog运行吗?我只使用setVisible()来隐藏它,而不使用dispose();

  • 我有一个简单的组件 问题是我需要添加什么

  • 问题内容: 我有这样的代码: 但是当我更改为时,输出是正确的: 为什么?该方法有效,但有时它是盲目的,所以我不想使用它。有人可以给我一些建议吗?谢谢! 问题答案: 如果您仔细阅读的文档,您会注意到它指出(强调我的意思): 如果此组件是轻量级组件,则此方法将导致尽快调用此组件的paint方法。否则,此方法将导致 尽快 调用此组件的update方法。 这意味着允许AWT / Swing通过合并快速连续

  • 编辑:下面是list_item_view.xml