有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JFrame上正确显示PNG

如何在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);

共 (1) 个答案

  1. # 1 楼答案

    我不知道这是否适合您的特殊情况,但如何更改JFrame的形状以匹配图像?^{}允许您使用geom包中的任何形状。我看到这是一个启动屏幕,可能没有装饰,所以设置形状就可以了