2013-05-07 318 views
9

我有一個Graphics2D對象,我想設置對象的背景。它有一個setBackground方法,它有一個Color參數。這樣我可以設置背景的顏色。Java Graphics2D透明背景

我的問題是:如何設置對象背景的透明度?我能以某種方式告訴它是完全透明的嗎?我能否以某種方式告訴它是完全不透明的?我能否以某種方式告訴它具有0.8透明度/不透明度?我如何設置這些值?

我看到有int預定義的值,稱爲TRANSLUCENTOPAQUE,但我不知道如何使用它們。

也許正確的用法是用int參數調用Color的構造函數嗎?

+2

顏色取四個參數r,g,b,a。 a是您想要設置的Alpha或透明度組件。 – 2013-05-07 15:59:46

+0

設置r = 0,g = 0,b = 0會將背景創建爲白色,但是使a = 1會將其設置爲透明 – user2277872 2013-05-07 16:03:58

+2

是的,現在我可以看到。我們如何定義「a」?這是一個介於0和255之間的值,0表示它是不透明的,255表示它是透明的? – 2013-05-07 16:05:31

回答

14

您可以通過指定透明度來構造Color對象。例如,下面的代碼構造一個紅色與50%的透明度

​​
+1

如何設置我的Graphics2D的背景?有一個setBackground函數,但它不設置背景。 generator.setBackground(Settings.canvasColor),其中Settings.canvasColor爲Color.BLUE,但畫布在一天結束時仍爲白色。 – 2013-05-07 21:01:20

+4

我還沒有看到任何好的解決方案將Graphics2D對象的背景設置爲顏色(它有一個方法來做到這一點,但該方法沒有任何影響),所以我畫了一個矩形與給定的顏色填滿畫布。 – 2013-05-07 22:46:14

+0

@Lajos:...這意味着:'#setColor()'+'#fillRect()'對嗎? – Campa 2016-01-12 08:49:03

2

Java的實際上是這個東西不錯,可以實現透明度等等。下面是一個簡單的透明窗口,我copied從Oracle的一些代碼:

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以獲取更多信息。

+1

我正在使用Graphics2D對象,而不是JFrame。 – 2013-05-07 20:59:11

0

如果您使用JPanel,您可以嘗試此操作: jPanel1.setOpaque(false);