切换JFrame但有一个闪烁屏幕

时间:2018-01-06 06:29:59

标签: java jframe

如何在没有闪烁屏幕的情况下在1个JFrame和另一个JFrame之间切换?切换的代码是什么?我用这段代码切换......

JFrame2 ref = new JFrame2();
ref.setVisible(true);
this.setVisible(false)

是的,它运行并切换到JFrame2,但问题是当它切换到JFrame 2时屏幕闪烁。

1 个答案:

答案 0 :(得分:1)

我建议您制作自定义JPanel并更新它,而不是使用新的JFrame

将您的挥杆组件拆分并分组到JPanels然后调用

  

panel.revalidate();

     

panel.repaint();

您可能还想设置

  

panel.setDoubleBuffered(真); //顺利过渡。

有关详细信息,请参阅Oracle's doc

这是一个简单的例子。

public static void main(String[] args) throws IOException {

    JFrame f = new JFrame("Frame");
    f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    f.setSize(300, 300);

    File file = new File("src/stackoverflow/index.png");
    customPanel pane = new customPanel();
    pane.setDoubleBuffered(true);
    pane.setImage(ImageIO.read(file));
    f.add(pane);
    f.setVisible(true);

    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    file = new File("src/stackoverflow/index1.png");
    pane.setImage(ImageIO.read(file));
    pane.repaint();
}

static class customPanel extends JPanel{
    BufferedImage image;

    public void setImage(BufferedImage image) {
        this.image = image;
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null);
    }
}