使用透明图像创建 AWT 自定义窗口形状

3

我正在尝试使用AWT制作UI。我想只使用图像和透明组件。目前,我无法理解如何制作一个主窗口,该窗口应为具有自定义形状的PNG图像。所有在图像中透明的区域都被替换为黑色。这是我使用的代码:

public class Test {
static Image image;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        //switch to the right thread

        image = ImageIO.read(Test.class.getClassLoader().getResource("resources/images/panel.png").openStream());

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Frame frame = new Frame("Test");
                frame.setUndecorated(true);
                frame.setBackground(new Color(0,0,0,0));
                frame.add(new BackGround(image,image.getWidth(frame),image.getHeight(frame)));
                frame.pack();
                frame.setSize(image.getWidth(frame), image.getHeight(frame));
                frame.setVisible(true);
                frame.setLocationRelativeTo(null);
            }
        }
        );
    }
    private static class BackGround extends Component {
        private Image img;
        private int wid, hgt;
        public BackGround(Image img, int wid, int hgt){
            this.img=img;
            this.wid=wid;
            this.hgt=hgt;

        }
        @Override
        public void paint(Graphics graphics) {
                graphics.drawImage(image,0,0,wid,hgt,0,0,wid,hgt,null);
        }
    }
}

2
“我正在尝试使用awt制作用户界面。” -- 为什么?为什么不至少使用Swing? - Hovercraft Full Of Eels
JavaFX有透明框架,我认为AWT或Swing没有这个功能。您将背景设置为白色,这会使透明图像变为白色。 - Srinath Ganesh
我并不在意它是Swing还是AWT。正如您可以从代码中看到的那样,我使用了SwingUtilities,事实上已经尝试使用Swing来实现相同的效果。 - black
1
AWT组件没有透明度的概念,它们只是不透明的。 - MadProgrammer
如果有人告诉我如何在Swing中实现它,我将不胜感激。 - black
显示剩余7条评论
1个回答

6

1
真的是时候创建自己的网站了(看起来你有很多空闲时间),就像camickr或StanislavL那样,大部分或者说描述只需要简单的复制粘贴操作,不开玩笑。 - mKorbel
@mKorbel 是的,我也考虑过这样做 ;) - MadProgrammer
@mKorbel 我考虑写一些我在这里发现的更有趣的问题...是的,把人们链接回博客会很好。 - MadProgrammer
没错,你可以看到 :-) 无论如何,这是来自恐龙时代的雅达利 :-) 作者是安德鲁·汤普森。 - mKorbel
@mKorbel 很不幸,由于我的主机的特殊性质,我在登录方面遇到了麻烦,并且得到的支持帮助很少。我本来想自己上传一些示例,但我决定采用SO使用JS格式化代码的方法。太棒了!博客(甚至是SE自己的博客区域!) tend to be ..more problematic for formatting and displaying code nicely. 我曾经为了让 这篇博客 中的代码看起来好看而感到噩梦般的困扰,同时还要去掉多余的“空格”! - Andrew Thompson
@Andrew Thompson,这只是小问题,但在凭据中,您链接到了swing标签,而不是applet。- aaaaaach我明白了 :-) 嗯嗯,同意 :-) - mKorbel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接