java - Mac 上功能透明但 Windows 上不行?

标签 java swing

在 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/

相关文章:

java - 将增强循环转换为 Java 8 Streams,过滤器

java - 为什么我的应用程序在尝试建立 http 连接时不断崩溃?

Java将 map 值放入树集中?

java - 在 Java Swing 中给按钮预设 "Style"

java - 如何在 Swing 应用程序中设计用户首选项模块?

java - Spring Data Repository - 没有合格的 bean 注入(inject)

java - Spring 数据休息: Nested objects not being stored in separate Mongo Repository

java - 在 componentResized 事件上更新 List<Point>

java - 如何使矩形按比例适合框架?

java - JFrame 在第一次实例化后不工作?