是的,这个问题无处不在。但是所有(工作)解决方案都使用受限制的AWTUtilities工具包。
因此。我只想控制窗口的不透明度。无需塑造或不整洁。只是一个透明的contentPane(简单)和透明的JFrame背景(非常困难)。
我本可以发誓我昨天得到了正确的组合,但现在我似乎无法重现它。还有一些解决方案没有使用AWTUtilities,但它们不起作用......有人有一个很好的解决方案吗?
我失败代码的一个例子:
public static void main(String[] args) {
JFrame test = new JFrame();
test.setSize(400, 400);
test.setLocationRelativeTo(null);
test.setUndecorated(true);
test.setBackground(new Color(0, 0, 0, 0));
test.getContentPane().setBackground(new Color(0,0,0,0));
test.setVisible(true);
}
但这只是一个白色方块。关闭但没有雪茄。我也尝试重写绘制方法,有人在说丢弃alpha通道的东西,但这使它变黑(当然)。所以... Stack Overflow就是。
如果有一个傻瓜完全回答这个问题,请指出我并立即删除。
更新 根据评论中的要求,这里是我如何到达这里的历史:
每个人到达的第一个链接是how to create translucent and shaped windows.这里有几行类似于“......半透明的框架,不透明度为75%”。所以...看起来他们的定义是相同的,至少在那篇文章中。不幸的是他们使用了这个库。
我可以追逐的几个链接:
在http://www.java-gaming.org/index.php?topic=24635.0报告了一个不起作用的“工作”解决方案,显示出一些希望,但我无法使其发挥作用。
http://techgearup.wordpress.com/2008/09/19/transparent-jframe-background/是一种使用屏幕截图的hackish方式,并且在其他一些地方也是重复的。
答案 0 :(得分:1)
如果不使用调用本机代码的Java v.6u10 +或第三方库,则无法执行此操作。在Swing Frames中,Dialogs和Windows被视为“顶级组件”,并在底层窗口系统中呈现。在Java v6u10之前,所有顶级组件都有一个默认的,不透明的浅灰色背景,并且无法从Java代码中更改它。
答案 1 :(得分:0)
叹息我遇到了同样的问题,经过大量的工作,我找到了一种在我的计算机上获得正确设置透明屏幕的方法。但是,一旦设置框架透明,很多东西就会停止工作。如果您在任何地方使用JTextArea声明,它会立即停止工作。它甚至不会抛出错误!
所以这是代码,希望这有一些用处。 Plz回复你是否用它来制作一个有效的JScrollPane:)
public class gui {
public frame f;
public String name = "Transparent?"; //name your frame *
public JButton exit = new JButton("Exit");
public gui(){ //non-static context
f = new JFrame(name);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //*
f.setLocationRelativeTo(null);
f.setExtendedState(f.getExtendedState() | JFrame.MAXIMIZED_BOTH);
//maximizes window. if you dont want it, f.setSize(int, int)
f.setUndecorated(true); //necessary for setOpacity
f.setOpacity(.7f); //achieve trasparancy
f.setVisible(true); //show window
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
System.exit(0);
}
});
f.add(exit, BorderLayout.CENTER);
//since X is not available in the window, make a button to exit
}
public static void main(){
new gui();
}
}
//* Note: since the default Window manager is set off with setUndecorated(true),
// the name and buttons won't really show.