2017-05-24 67 views
0

我正在嘗試在處理3(基於Java)的語言中爲桌面創建一個時鐘應用程序,並且我需要使背景透明,以便您可以查看時鐘後面的內容例如桌面)。在處理語言中製作透明背景(應用程序)

我嘗試這樣做:

background(0, 0, 0, 0); 

不起作用。

任何人都可以幫助我嗎?

+0

參見[ 「如何得到透明的JFrame」(https://開頭計算器.com/questions/28656647/how-to-get-transparent-jframe) –

+0

@AndyThomas它在處理中不起作用 –

+0

請更具體地說,它不起作用。當你嘗試你的代碼時究竟發生了什麼?當你嘗試Andy的建議時究竟發生了什麼?你真的嘗試過安迪的建議嗎,還是你看過而不嘗試? –

回答

1

你將不得不到底層窗口並設置它的透明度。

如何做到這一點(以及是否有可能)將取決於您使用的渲染器以及您的計算機的能力。

這裏有一個如何做到這一點與默認渲染一個例子:

import processing.awt.PSurfaceAWT; 
import processing.awt.PSurfaceAWT.SmoothCanvas; 
import javax.swing.JFrame; 

void setup() { 
    size(200, 200); 
    PSurfaceAWT awtSurface = (PSurfaceAWT) surface; 
    SmoothCanvas smoothCanvas = (SmoothCanvas) awtSurface.getNative(); 
    JFrame jframe = (JFrame)smoothCanvas.getFrame(); 
    jframe.dispose(); 
    jframe.setUndecorated(true); 
    jframe.setOpacity(.5f); 
    jframe.setVisible(true); 
} 

void draw() { 
    background(0, 128); 
} 

請注意,這只是示例代碼,所以你可能有它玩得到它與您的電腦工作和你的渲染器。但總體思路是:你必須到底層窗口,然後設置它的透明度。

如果這不起作用,如果您將Processing作爲Java庫而不是通過Processing編輯器,則可能會有更好的運氣。具體來說,您應該能夠在顯示之前進入底層窗口。

+0

「沒有找到processing.awt.PSurfaceAWT庫」 –

+0

@yoavsarfaty這只是一個警告,而不是一個錯誤。就像我說的,這只是示例代碼。你將不得不做一些調試和修補,以使其在你的電腦上運行。它的工作原理是 –

+0

。 那種,我不能移動窗口 –

0

我會盡量給你一些Java代碼也許這些幫助你(透明通知幀):

import static java.awt.GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT; 
import static java.awt.GraphicsDevice.WindowTranslucency.TRANSLUCENT; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.GridBagLayout; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 
import java.awt.geom.RoundRectangle2D; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

/** 
* 
* @author Coder ACJHP 
*/ 
public class NotifyMe extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private JLabel label; 
    public NotifyMe() { 
     super("NotifyMe"); 
     setLayout(new GridBagLayout()); 
     addComponentListener(new ComponentAdapter() { 
      @Override 
      public void componentResized(ComponentEvent e) { 
       setShape(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(),15,15)); 
      } 
     }); 

     setUndecorated(true); 
     setSize(250, 80); 
     setAlwaysOnTop(true); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     label = new JLabel(); 
     label.setFont(new Font("Adobe Arabic", Font.BOLD, 14)); 
     label.setBounds(0, 0, getWidth(), getHeight()); 

     label.setForeground(Color.RED); 
     add(label); 
    } 

    public void setNotifiyNote(String note) { 
     this.label.setText(note); 
    } 

    public static void main(String[] args) { 

     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice gd = ge.getDefaultScreenDevice(); 
     final boolean isTranslucencySupported = gd.isWindowTranslucencySupported(TRANSLUCENT); 

     if (!gd.isWindowTranslucencySupported(PERPIXEL_TRANSPARENT)) { 
      System.err.println("Shaped windows are not supported"); 
      System.exit(0); 
     } 

     if (!isTranslucencySupported) { 
      System.out.println("Translucency is not supported, creating an opaque window"); 
     } 

     SwingUtilities.invokeLater(() -> { 
      NotifyMe sw = new NotifyMe(); 

      if (isTranslucencySupported) { 
       sw.setOpacity(0.7f); 
      } 
     }); 
    } 
} 
+1

請注意,這是一個[標籤:processing]問題,[Processing!= Java](https://meta.stackoverflow.com/questions/321127/processing-java)。具體來說,這個代碼根本不包括Processing窗口。另外請嘗試解釋什麼代碼,而不是僅僅粘貼一堆代碼而沒有解釋。 –

+0

@KevinWorkman你是對的它不處理代碼只是我試圖給一個例子。如果有任何問題,我可以刪除我的答案這不是很大的問題。 –

+0

那麼,代碼並沒有真正幫助OP,因爲他們在Processing中工作。處理自己處理它自己的窗口。所以在這種情況下創建一個新窗口並沒有什麼幫助。 –