我正在嘗試在處理3(基於Java)的語言中爲桌面創建一個時鐘應用程序,並且我需要使背景透明,以便您可以查看時鐘後面的內容例如桌面)。在處理語言中製作透明背景(應用程序)
我嘗試這樣做:
background(0, 0, 0, 0);
不起作用。
任何人都可以幫助我嗎?
我正在嘗試在處理3(基於Java)的語言中爲桌面創建一個時鐘應用程序,並且我需要使背景透明,以便您可以查看時鐘後面的內容例如桌面)。在處理語言中製作透明背景(應用程序)
我嘗試這樣做:
background(0, 0, 0, 0);
不起作用。
任何人都可以幫助我嗎?
你將不得不到底層窗口並設置它的透明度。
如何做到這一點(以及是否有可能)將取決於您使用的渲染器以及您的計算機的能力。
這裏有一個如何做到這一點與默認渲染一個例子:
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編輯器,則可能會有更好的運氣。具體來說,您應該能夠在顯示之前進入底層窗口。
「沒有找到processing.awt.PSurfaceAWT庫」 –
@yoavsarfaty這只是一個警告,而不是一個錯誤。就像我說的,這只是示例代碼。你將不得不做一些調試和修補,以使其在你的電腦上運行。它的工作原理是 –
。 那種,我不能移動窗口 –
我會盡量給你一些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);
}
});
}
}
請注意,這是一個[標籤:processing]問題,[Processing!= Java](https://meta.stackoverflow.com/questions/321127/processing-java)。具體來說,這個代碼根本不包括Processing窗口。另外請嘗試解釋什麼代碼,而不是僅僅粘貼一堆代碼而沒有解釋。 –
@KevinWorkman你是對的它不處理代碼只是我試圖給一個例子。如果有任何問題,我可以刪除我的答案這不是很大的問題。 –
那麼,代碼並沒有真正幫助OP,因爲他們在Processing中工作。處理自己處理它自己的窗口。所以在這種情況下創建一個新窗口並沒有什麼幫助。 –
參見[ 「如何得到透明的JFrame」(https://開頭計算器.com/questions/28656647/how-to-get-transparent-jframe) –
@AndyThomas它在處理中不起作用 –
請更具體地說,它不起作用。當你嘗試你的代碼時究竟發生了什麼?當你嘗試Andy的建議時究竟發生了什麼?你真的嘗試過安迪的建議嗎,還是你看過而不嘗試? –