在 stackoverflow 中搜索这个问题的答案只会让我想到其他问题,询问如何实现其中一个问题的透明度,但没有一个问题涉及其中一个问题,但另一个问题则不然。 我确信现在您已经能够解决这个问题,但我会更深入地解释一下...我和一个 friend 正在开发一个 java 应用程序,在运行时会启动一个启动器。他使用 Mac,JFrame 变得透明,但是当我将项目同步到我的计算机时; Windows PC,JFrame 的背景可见,顶部的图形闪烁,有点像频闪灯。
如果有人可以提供任何类型的见解,我们将不胜感激,如果需要提供更多信息,我将尝试更深入地了解程序并获取更多信息。
private void setUpWindow(int width, int height) {
setIconImage(images.get(1));
setSize(width, height);
setUndecorated(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(new Color(0,255,0,0));
setLayout(new BorderLayout());
addMouseListener(this);
setResizable(false);
setLocationRelativeTo(null);
addComponents();
requestFocus();
setVisible(true);
}
private void addComponents() {
setContentPane(new BackPanel());
getContentPane().setBackground(Color.BLACK);
setLayout(new BorderLayout());
panel.setSize(screenSize);
add(panel);
}
窗口大小为 1000x600
public class BackPanel extends JPanel {
public BackPanel() {
setOpaque(false);
setVisible(true);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D overGraphics2D = (Graphics2D)g.create();
overGraphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.0f));
overGraphics2D.setColor(Color.BLACK);
overGraphics2D.fill(getBounds());
overGraphics2D.dispose();
}
}
public class DrawingPanel extends JPanel
{
public DrawingPanel()
{
setVisible(true);
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
refreshTimer.schedule(new refreshTimer(), 1);
}
}
所引用的刷新计时器有一个延迟“1”,以便在绘制启动器时启动。
此外,还有一些想法; how to set JFrame background transparent but JPanel or JLabel Background opaque?用于设置透明度。
最佳答案
The referred refresh timer has a delay of '1' so that it is started when the launcher is drawn.
这是跨平台绘图的问题,因为不同的操作系统有不同的“分辨率”。您需要在该 paintComponent()
方法内绘制/调用绘制方法。您还需要通过获取屏幕尺寸然后设置窗口全屏来使窗口全屏(或有点假全屏)。像这样:
//in the constructor after declaring the frame undecorated
setSize(Toolkit.getDefaultToolkit().getScreenSize());
希望有帮助!
关于java - Mac 上功能透明但 Windows 上不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22258226/