Java 使用透明图像的AWT自定义窗口形状

Java 使用透明图像的AWT自定义窗口形状,java,swing,awt,transparency,Java,Swing,Awt,Transparency,我正在尝试使用AWT创建UI。我只想使用图像和透明组件。现在我无法理解如何制作一个主窗口,它应该是一个带有自定义形状的PNG图像。图像中的所有透明区域都将替换为黑色。以下是我使用的代码: public class Test { static Image image; /** * @param args the command line arguments */ public static void main(String[] args) throws IOEx

我正在尝试使用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);
        }
    }
}

AWT组件没有透明度的概念,它们总是不透明的

试着看看


有关使用Swing的更多示例,请参见“我正在尝试使用awt创建UI。”——为什么?为什么不至少Swing呢?javafx有透明的框架,我不认为awt或Swing有那个规定。你将背景设置为白色,这会使透明图像变白。我真的不在乎它是Swing还是AWT。正如您从我使用SwingUtilities的代码中所看到的,事实上,我尝试使用Swing-alreadyAWT组件实现同样的功能。这些组件没有透明性的概念,它们只是不透明的。你应该关心你是否想这样做。reallyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyjokes@mKorbel是的,我想过自己去做;)@mKorbel我想把我在这里发现的一些更有趣的问题写在博客上……是的,只要把人们链接到博客上就好了……对,你可以看到:-)不管怎样,恐龙时代的阿塔里:-)安德鲁·汤普森too@mKorbel不幸的是,由于我的主机不寻常,我登录时遇到问题,支持人员提供的帮助很少。我自己也会上传一些例子,但我已经决定省去SO使用JS格式化代码的方法。明亮的博客(甚至是SE自己的博客区!)在格式化和良好显示代码方面往往会有更大的问题。我做了噩梦,试图让代码看起来近乎完美,同时去掉多余的“空白”!