java - 如何在 JFrame 上正确显示 PNG

标签 java swing png transparency

我将如何在 JFrame 上显示带有透明 parst 的 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);
}

感谢您的帮助! 真诚的罗伯托!

编辑: 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);

最佳答案

我不知道这是否适合您的特定情况,但是如何更改 JFrame 的形状以匹配图像? setShape(Shape shape)允许您使用 geom 包中的任何形状。我看到这是一个闪屏,可能没有装饰,所以设置形状应该可以解决问题。

关于java - 如何在 JFrame 上正确显示 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21364798/

相关文章:

java.lang.ExceptionInInitializerError 和 org.hibernate.AnnotationException : mappedBy reference an unknown target entity property:

java - 添加 'ndk { abiFilters ' armeabi-v7a' ,'arm64-v8a' ,'x86' ,'x86_64' }' 后 Android 应用程序不兼容 64 位

java - java将html表格转为png图片

iPhone SDK : accessing indexed color PNG images

java - 为什么 BufferedImage 的初始化速度比 Image 快

java - 使用键盘快捷键填充 jTextField

Java Swing 对动画的支持

javascript - 使用 PHP 将 png/svg 导出为单个 png 文件

java - 代码告诉我,当我已经实现 ActionListener 时,我需要实现它吗?

java - 添加到 JList 并选择元素?