2010-06-18 98 views
1

我想創建一個不僅具有不透明度的JWindow,而且還希望更改Swing中不透明度的默認顏色。JWindow with Black Opacity

所以例如,如果我寫:

AWTUtilities.setWindowOpacity(this, 0.5f); 

這將使正是我想要有一個例外做的,顏色爲白色。我怎樣才能讓顏色變成黑色?

我用盡了一切從setBackground(Color.Black)等的 「這個」 ...

回答

2
 window.getContentPane().setBackground(Color.BLACK); 
0

透明的JWindow。

public class TransparentWindow{ 

    JWindow window; 

    public TransparentWindow(){ 
     initializeTransparentWindow(); 
    } 

    private void initializeTransparentWindow() { 
     // searching graphical configuration that provide transparent window 
     GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice[] devices = env.getScreenDevices(); 
     GraphicsConfiguration translucencyCapableGC = null; 
     for (int i = 0; i < devices.length && translucencyCapableGC == null; i++) { 
      GraphicsConfiguration[] configs = devices[i].getConfigurations(); 
      for (int j = 0; j < configs.length && translucencyCapableGC == null; j++) { 
       if (AWTUtilities.isTranslucencyCapable(configs[j])) { 
        translucencyCapableGC = configs[j]; 
       } 
      } 
     } 
     if (translucencyCapableGC != null) { 
      window = new JWindow(translucencyCapableGC) { 
       @Override 
       public void paint(Graphics g) { 
        if (getWidth() > 4 && getHeight() > 4) { 
         g.clearRect(0, 0, getWidth(), getHeight()); 
         g.setColor(new Color(0x0, 0x0, 0x0, 0xaa)); 
         g.fillRect(0, 0, 1, getHeight()); 
         g.fillRect(0, 0, getWidth(), 1); 
         g.fillRect(0, getHeight() - 1, getWidth(), 1); 
         g.fillRect(getWidth() - 1, 0, 1, getHeight()); 
         g.setColor(new Color(0x0, 0x0, 0x0, 0x10)); 
         g.fillRect(1, 1, getWidth() - 1, getHeight() - 1); 
        } 
       }; 
      }; 
      AWTUtilities.setWindowOpaque(window, false); 
     } 
     else { 
      window = new JWindow(); 
      AWTUtilities.setWindowOpacity(window, 0.5f); 
     } 
    }