Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 让按钮上图像的透明部分透明_Java_Swing_Background_Awt_Transparent - Fatal编程技术网

Java 让按钮上图像的透明部分透明

Java 让按钮上图像的透明部分透明,java,swing,background,awt,transparent,Java,Swing,Background,Awt,Transparent,我用了两张图片,一张是屏幕的背景,另一张是按钮的背景。按钮的图像在某些部分是透明的。我希望它能覆盖透明部分的背景图像 它应该看起来像,但它不是。看起来像 这是我的密码: import javax.swing.*; import java.awt.*; import java.awt.event.*; class TryOut1 extends JFrame { public TryOut1() { screen(); buttonDoor();

我用了两张图片,一张是屏幕的背景,另一张是按钮的背景。按钮的图像在某些部分是透明的。我希望它能覆盖透明部分的背景图像

它应该看起来像,但它不是。看起来像

这是我的密码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class TryOut1 extends JFrame
{

   public TryOut1()
   {
       screen();
       buttonDoor();

       setSize(1280,1024); 
   }

   public void screen(){
       setSize(1280,1024);

       setDefaultCloseOperation(EXIT_ON_CLOSE);
       setVisible(true);
       setLayout(new BorderLayout());
       setContentPane(new JLabel(new ImageIcon("Ziegel4.jpg")));
       setLayout(new FlowLayout());

       setSize(1280,1024);
   }

   public void buttonDoor(){
       JButton b1 = new JButton(new ImageIcon("Tor2.png"));
       b1.setEnabled(true);
       b1.setVisible(true);
       b1.setBackground(new Color( 0, 0, 0, 0) );


       add(b1);

       b1.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
           dispose();
       }
       });
   }

   public static void main(String args[]) 
    {
        new TryOut1();
    }
}
我如何才能使图像的透明部分真正透明


提前感谢您的帮助^ ^

而不是创建
JLabel
,将背景图像添加到其中,然后将此标签添加到内容窗格不是最好的方法。标签将被视为一个组件,布局管理器不会正确定位所有其他组件

您应该通过覆盖
paintComponent(Graphics g)
方法绘制内容窗格的背景图像,如图所示

然后更改
JButton的正确属性,并使其透明,如图所示

所有这些都以一种方式进行:

预览:(忽略右侧的空白,我的背景图像很小)


不是创建
JLabel
,而是将背景图像添加到其中,然后将此标签添加到内容窗格中,这不是最好的方法。标签将被视为一个组件,布局管理器不会正确定位所有其他组件

您应该通过覆盖
paintComponent(Graphics g)
方法绘制内容窗格的背景图像,如图所示

然后更改
JButton的正确属性,并使其透明,如图所示

所有这些都以一种方式进行:

预览:(忽略右侧的空白,我的背景图像很小)


在按钮上尝试以下方法:

b1.setBorderPainted(false);
b1.setContentAreaFilled(false);
b1.setFocusPainted(false);
b1.setOpaque(false);

在按钮上尝试以下方法:

b1.setBorderPainted(false);
b1.setContentAreaFilled(false);
b1.setFocusPainted(false);
b1.setOpaque(false);

布局管理器无法正确定位所有其他组件。
-如果设置标签的布局管理器,它们将正确定位。鉴于上面的代码以其原始大小绘制图像,最好使用JLabel,因为现在标签将具有图像的首选大小,并且框架将正确显示和打包()。所以在本例中,我只使用JLabel。进行自定义绘制时,您还负责确定零部件的首选尺寸。我只会在需要缩放/平铺背景图像时使用自定义绘制。
布局管理器不会正确定位所有其他组件。
-如果设置标签的布局管理器,它们将正确定位。鉴于上面的代码以其原始大小绘制图像,最好使用JLabel,因为现在标签将具有图像的首选大小,并且框架将正确显示和打包()。所以在本例中,我只使用JLabel。进行自定义绘制时,您还负责确定零部件的首选尺寸。如果你需要缩放/平铺背景图像,我只会使用自定义绘画。很好。这就是我使用的技术,从一张图片中形成5个按钮和4个标签(检查链接,这并不像听起来那么不合逻辑)。打得好。这就是我使用的技术,从一张图片中形成5个按钮和4个标签(检查链接,这并不像听起来那么不合逻辑)。