【问题标题】:Java Graphics2D transparent backgroundJava Graphics2D 透明背景
【发布时间】:2013-05-01 16:04:33
【问题描述】:

我有一个Graphics2D 对象,我想设置对象的背景。它有一个 setBackground 方法,它有一个 Color 参数。这样我就可以设置背景的颜色了。

我的问题是:如何设置对象背景的透明度?我可以以某种方式告诉它是完全透明的吗?我可以以某种方式告诉它完全不透明吗?我可以以某种方式告诉它具有 0.8 的透明度/不透明度吗?如何设置这些值?

我看到有称为TRANSLUCENTOPAQUE 的int 预定义值,但我不确定如何使用它们。

也许正确的用法是用int参数调用Color的构造函数?

【问题讨论】:

  • 颜色有四个参数 r,g,b,a。 a 是您要设置的 Alpha 或透明度组件。
  • 设置 r=0, g=0, b=0 将创建背景为白色,但将 a=1 设置为透明
  • 是的,我现在可以看到了。我们如何定义“a”?是介于 0 到 255 之间的值吗,0 表示不透明,255 表示透明?
  • 如何定义透明度为 0.8 的白色?如何定义透明的白色?如何定义不透明的白色?

标签: java background transparency graphics2d


【解决方案1】:

您可以通过指定透明度来构造 Color 对象。例如下面的代码构造了一个透明度为 50% 的红色

Color c=new Color(1f,0f,0f,.5f );

【讨论】:

  • 如何设置我的 Graphics2D 的背景?有一个 setBackground 函数,但它不设置背景。 generator.setBackground(Settings.canvasColor),其中 Settings.canvasColor 是 Color.BLUE,但画布在一天结束时仍然是白色的。
  • 我还没有看到将Graphics2D对象的背景设置为颜色的任何好的解决方案(它有一个方法可以做到这一点,但该方法没有任何效果),所以我有用给定的颜色绘制一个矩形来填充画布。
  • @Lajos: ...这意味着:#setColor() + #fillRect() 对吗?
  • @LajosArpad:setBackground 方法与setColor 方法非常相似,它只设置画笔的颜色。如果你想用背景色填充整个画布,请使用clear
【解决方案2】:

您可以通过以下方式调用Color的构造函数:

Color c = new Color(r,g,b,a);

其中 a 是 alpha(透明度)值。

与所有 Java 类一样,您可以在官方 API 中找到此信息:http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html

这是一个非常好的资源,可以让您在此处等待答案。

【讨论】:

    【解决方案3】:

    如果你使用的是 JPanel,你可以试试这个: jPanel1.setOpaque(false);

    【讨论】:

      【解决方案4】:
      jPanel1.setBackground(new Color(0,0,0,200));
      /*This will put a transparent black color on a panel, the important part of the code is: .setBackground(new Color(0,0,0,200));*/
      

      【讨论】:

        【解决方案5】:

        Java 实际上在这方面非常擅长,您可以实现透明度等等。这是一个简单的透明窗口的一些代码,我来自 oracle 的 copied

        package misc;
        
        import java.awt.*;
        import javax.swing.*;
        import static java.awt.GraphicsDevice.WindowTranslucency.*;
        
        public class TranslucentWindowDemo extends JFrame {
            public TranslucentWindowDemo() {
                super("TranslucentWindow");
                setLayout(new GridBagLayout());
        
                setSize(300,200);
                setLocationRelativeTo(null);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
                //Add a sample button.
                add(new JButton("I am a Button"));
            }
        
            public static void main(String[] args) {
                // Determine if the GraphicsDevice supports translucency.
                GraphicsEnvironment ge =
                    GraphicsEnvironment.getLocalGraphicsEnvironment();
                GraphicsDevice gd = ge.getDefaultScreenDevice();
        
                //If translucent windows aren't supported, exit.
                if (!gd.isWindowTranslucencySupported(TRANSLUCENT)) {
                    System.err.println(
                        "Translucency is not supported");
                        System.exit(0);
                }
        
                JFrame.setDefaultLookAndFeelDecorated(true);
        
                // Create the GUI on the event-dispatching thread
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                       TranslucentWindowDemo tw = new TranslucentWindowDemo();
        
                        // Set the window to 55% opaque (45% translucent).
                        tw.setOpacity(0.55f);
        
                        // Display the window.
                        tw.setVisible(true);
                    }
                });
            }
        }
        

        查看here了解更多信息。

        【讨论】:

        • 我使用的是 Graphics2D 对象,而不是 JFrame。
        【解决方案6】:

        如果您想要提供透明效果,请使用 4 个变量的颜色属性:

        this.setBackground(新颜色 (0,0,0, .5f));

        这为背景提供了前三个参数的RGB颜色(*new Color (** 0,0,0, **. 5f)*),第四个用于确定不透明度百分比(不透明

        如果您不希望显示背景,请使用值null

        this.setBackground (null);

        很多使用 setOpaque(false);但这会带走 padding 而不是 background

        【讨论】:

          【解决方案7】:

          像这样使用颜色的构造函数:

          Color color = new Color(152,251,152, 50);
          

          值 50 表示透明度。

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-08
          • 1970-01-01
          • 2014-05-28
          • 1970-01-01
          • 2021-09-20
          • 2019-02-07
          • 2020-10-15
          • 2017-06-22
          相关资源
          最近更新 更多