Java 如何使AWT组件在渐进式背景图像上透明?使用了窗口()、面板()、按钮(),但失败

Java 如何使AWT组件在渐进式背景图像上透明?使用了窗口()、面板()、按钮(),但失败,java,linux,swing,user-interface,awt,Java,Linux,Swing,User Interface,Awt,当背景为渐进图像时,如何使AWT组件透明 注意:仅使用AWT,其中渐进式窗口()每秒5帧。使用新颜色(255,0,0,0)时,Panel()现在不透明。如何使面板透明 AWT?此处: public class 888 extends Window { private Button button; public 888() { super(new Frame()); // Transparent failed getO

当背景为渐进图像时,如何使AWT组件透明

注意:仅使用AWT,其中渐进式窗口()每秒5帧。使用新颜色(255,0,0,0)时,Panel()现在不透明。如何使面板透明

AWT?此处:

public class 888 extends Window 
{
    private Button button;

    public 888() 
    {
        super(new Frame());
        // Transparent failed
        getOwner().setBackground(new Color(255, 0, 0, 0) );

        this.setLayout (new BorderLayout ());

        button = new Button("close");

        button.setBackground(Color.RED);
        button.setSize(200,200);
        button.setLocation(0,20);

        this.add("North", button);

        Panel p = new Panel();
        //p.setOpaque(false);
        p.setSize(200,200);
        p.setLocation(400,400);
        // Transparent failed
        p.setBackground(new Color(255,0,0,0));
        p.add("Left", new Button("Test"));
        this.add("North", p);

        //AWTUtilities.setWindowOpacity(this, 0.2f); // Error in Linux

    }


    public static void main(String[] args) 
    {
        Window j = new 888();
        j.setVisible(true);
        //j.setBackground( new Color(255, 0, 0, 0) );
    }

}
SWing?:这里

public class 888 extends JWindow 
{
    private JButton button;

    public 888() 
    {
        //super(new Frame());
    // Transparent failed
        getOwner().setBackground(new Color(255, 0, 0, 0) ); 

        this.setLayout (new BorderLayout ());

        button = new JButton("close");

        button.setBackground(new Color(255,0,0,255));
        button.setSize(200,200);
        button.setLocation(0,20);

        this.add("North", button);

        JPanel p = new JPanel();
        //p.setOpaque(false);
        p.setSize(200,200);
        p.setLocation(400,400);
        // Transparent failed
        p.setBackground(new Color(255,0,0,0));
        p.add("Left", new Button("Test"));
        this.add("North", p);

        //AWTUtilities.setWindowOpacity(this, 0.2f); // Error in Linux

    }


    public static void main(String[] args) 
    {
        JWindow j = new 888();
        j.setVisible(true);
        //j.setBackground( new Color(255, 0, 0, 0) );
    }

}
注意:没有一个能真正起作用,对于Swing,我对JButton有问题,因为当JWindow刷新时,JButton就不可见了。使用AWT时,当我使用按钮和面板,然后没有人可以设置其透明度

我如何解决它?用于渐进式背景图像面板或按钮使其透明

摘要:

public class 888 extends Window 
{
    private Button button;

    public 888() 
    {
        super(new Frame());
        // Transparent failed
        getOwner().setBackground(new Color(255, 0, 0, 0) );

        this.setLayout (new BorderLayout ());

        button = new Button("close");

        button.setBackground(Color.RED);
        button.setSize(200,200);
        button.setLocation(0,20);

        this.add("North", button);

        Panel p = new Panel();
        //p.setOpaque(false);
        p.setSize(200,200);
        p.setLocation(400,400);
        // Transparent failed
        p.setBackground(new Color(255,0,0,0));
        p.add("Left", new Button("Test"));
        this.add("North", p);

        //AWTUtilities.setWindowOpacity(this, 0.2f); // Error in Linux

    }


    public static void main(String[] args) 
    {
        Window j = new 888();
        j.setVisible(true);
        //j.setBackground( new Color(255, 0, 0, 0) );
    }

}
在做了许多测试之后,我现在得出了一个结论,这在其他地方是不可用的。主要在渐进扫描窗口()或JWindow()中。最好对(无透明对象)使用Awt,对(透明对象)使用Swing。不要像许多人一样下结论不使用Awt和Swing,你必须聪明地将其混合,否则将以无穷无尽的69岁夏天结束:)

参考:


这是你关于这个话题的第二个问题,我仍然不知道你在做什么。您一直在谈论背景图像,但没有在代码中显示图像的代码

是的,使用alpha值为0的setColor时会出现问题。你不应该这样做。正确的解决方案是使组件不不透明

有关更多信息,请参阅

或许这就是你要找的

此外,约束的用法也很旧:

this.add("North", button); 
首先,您不应该硬编码约束值。其次,如果您阅读了API,您将看到您应该使用:

this.add(button, BorderLayout.NORTH); 

当使用布局管理器时,您不需要设置大小和位置。

当您只想在AWT中使用Swing标记时,为什么您会质疑Swing标记?显然,amswer将使用支持不透明度的Swing组件,但您似乎不想使用Swing。你也提到了背景图像,但是你发布的代码没有使用背景图像。我同意camickr的观点:为什么不使用Swing呢?有没有提到强制使用AWT的限制?@camickr:没有。按钮。设置背景(新颜色(255,0,0,0));作为JButton、JPanel、JWindow失败。在渐进式背景图像中,鼠标悬停在该图像上,当背景刷新时,该图像将丢失按钮。@装满鳗鱼的气垫船:已完成。JButton的问题你的888类编译了吗?请看上面我的更新。我尝试了100%的AWT,但100%的Swing不起作用。我还尝试了一个工具:setWindowOpacity(这个,0.5f);它在Linux中有缺陷,无法使用最新的JDK/JRE。所以我仍然不理解你的问题。您的问题是关于使“组件透明”或“如何使面板透明”,而不是JFrame或JWindow。您是否正在尝试为JWindow找到解决方案,如果是,那么为什么您的SSCCE在窗口上有常规组件。您正在尝试查找Linux修复程序。如果是这样,那么在你的问题中说明。具体来说,我们无法猜测。当我使用Swing和JPanel()时,我可以使其透明。但是JButton()只失去了可见性。但是当我使用AWT和Panel()时,我无法使其透明。我的问题是如何使用AWT和Transparent Panel(),Button()在哪里工作并且不丢失其可见性。“当我使用Swing和JPanel()时,我可以使其透明。但是JButton()仅丢失其可见性。”。我不明白你在说什么。您的代码使用了一个JButton和一个容易混淆的按钮。你还没有尝试我给你的建议。我仍然没有在你的代码中看到任何图像。发布你的帖子你的SSCE使用了我已经给你的建议。它起作用了,对我来说,我解决了它。对于渐进扫描窗口()或JWindow(),我必须同时使用AWT和SWING。谢谢,你发布的链接我也试过了,但没有帮助。