2014-01-26 72 views
1

如何在JFrame上显示带有透明窗口的png。
我目前有这个代码,一切都很好,但它显示透明部分灰色!如何在JFrame上正确显示PNG

private static void createAndShowSplashScreen() throws Exception { 
    Image image = ImageIO.read(TCPServer.class 
      .getResource("images/splash.png")); 
    BufferedImage img = (BufferedImage) image; 

    frame = new JFrame("Splash"); 
    frame.setUndecorated(true); 
    frame.add(new JLabel(new ImageIcon(image)) { 
     { 
      setOpaque(false); 
     } 
    }); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setPreferredSize(new Dimension(img.getWidth(), img.getHeight())); 
    frame.setBounds((int) (java.awt.Toolkit.getDefaultToolkit() 
      .getScreenSize().getWidth()/2 - img.getWidth()/2), 
      (int) (java.awt.Toolkit.getDefaultToolkit().getScreenSize() 
        .getHeight()/2 - img.getHeight()/2), 
      img.getWidth(), img.getHeight()); 
    frame.setOpacity(0f); 
    frame.setMinimumSize(frame.getPreferredSize()); 
    frame.setVisible(true); 
} 

THX的帮助! 罗伯托真诚!

编辑: IMG

问题就迎刃而解了:

Image image = ImageIO.read(TCPServer.class 
      .getResource("images/splash.png")); 
    BufferedImage img = (BufferedImage) image; 

    frame = new JFrame("Splash"); 
    frame.setUndecorated(true); 
    frame.add(new JLabel(new ImageIcon(image)) { 
     { 
      setOpaque(false); 
     } 
    }); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setPreferredSize(new Dimension(img.getWidth(), img.getHeight())); 
    frame.setBounds((int) (java.awt.Toolkit.getDefaultToolkit() 
      .getScreenSize().getWidth()/2 - img.getWidth()/2), 
      (int) (java.awt.Toolkit.getDefaultToolkit().getScreenSize() 
        .getHeight()/2 - img.getHeight()/2), 
      img.getWidth(), img.getHeight()); 
    RoundRectangle2D r = new RoundRectangle2D.Double(0, 0, img.getWidth(), img.getHeight(), 25, 25); 
    frame.setShape(r); 
    frame.setOpacity(0f); 
    frame.setMinimumSize(frame.getPreferredSize()); 
    frame.setVisible(true); 
+0

将图像上传到我们可以看到它的网站。顺便说一句 - 尝试设置“JFrame”背景颜色为“Color.YELLOW”。有什么改变吗? –

+1

这个'frame.setOpacity(0f);'完全不能帮助你的情况。 –

+0

在它下面有一个for循环,使它淡入 –

回答

3

我不知道,但如果这适合你的特殊情况下,有关更改JFrame的形状和图像匹配怎么样? setShape(Shape shape)可让您使用geom包装中的任何形状。我发现这是一个闪屏,并且可能没有修饰,所以设置形状应该可以做到。

+1

将尝试给我10分钟 –

+1

谢谢你,这有助于它解决了我的问题 –

+1

良好的横向思维。 :) –