java - 如何在windows上获得透明的jframe?

标签 java swing jframe

你知道如何在Windows上获得透明的jframe吗?在 macOS 上,我通过使用这些行得到了它

frame.setUndecorated(true);
frame.setBackground(new Color(1,1,1,1));

它似乎不适用于 Windows :( 我该怎么做?

MacOS 示例

enter image description here

Windows 示例

enter image description here

我的代码:

    frm_languageSelector = new JFrame();
    pnl_buttons = new JPanel();

    frm_languageSelector.setUndecorated(true);
    frm_languageSelector.setBackground(new Color(0,0,0,0));
    frm_languageSelector.setFocusable(true);
    frm_languageSelector.setSize(500,100);
    frm_languageSelector.setLocationRelativeTo(null);
    pnl_buttons.setOpaque(false);
    pnl_buttons.setSize(500, 100);
    pnl_buttons.setLayout(new GridLayout(1,5));

    btn_enUS = new JButton();
    btn_enGB = new JButton();
    btn_it = new JButton();
    btn_fr = new JButton();
    btn_de = new JButton();

    btn_enUS.setBorderPainted(false);
    btn_enGB.setBorderPainted(false);
    btn_it.setBorderPainted(false);
    btn_fr.setBorderPainted(false);
    btn_de.setBorderPainted(false);

    btn_enUS.setToolTipText(lang.getWord("pnl_enUS"));
    btn_enGB.setToolTipText(lang.getWord("pnl_enGB"));
    btn_it.setToolTipText(lang.getWord("pnl_it"));
    btn_fr.setToolTipText(lang.getWord("pnl_fr"));
    btn_de.setToolTipText(lang.getWord("pnl_de"));

    pnl_buttons.add(btn_enUS);
    pnl_buttons.add(btn_enGB);
    pnl_buttons.add(btn_it);
    pnl_buttons.add(btn_fr);
    pnl_buttons.add(btn_de);

    frm_languageSelector.add(pnl_buttons);

最佳答案

您很可能没有在主 JPanel 上设置 setOpaque。

这有效,祝你好运。

public class TransparentFrame {

    private static class InvisibleFrame extends JFrame {
        public InvisibleFrame() throws HeadlessException {
            setUndecorated(true);
            setBackground(new Color(0,0,0,0));
        }
    }

    public static void main(String[] args) {
        InvisibleFrame frame = new InvisibleFrame();

        JPanel buttons = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));
        buttons.add(new JButton("1"));
        buttons.add(new JButton("2"));
        JButton exit = new JButton("exit");
        exit.addActionListener((e) -> frame.setVisible(false));
        buttons.add(exit);
        buttons.setOpaque(false);

        frame.setContentPane(buttons);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(300, 300, 500, 300);
        frame.setVisible(true);
        frame.toFront();
    }
}

关于java - 如何在windows上获得透明的jframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41808167/

相关文章:

java - JFrame 很小

java - 想要设置在由枚举填充的 JComboBox 中选择的默认值

java - 从按钮调用java类

java - 基于复选框 JTable 使特定单元格可编辑

java - 调用paintComponent的正确方法是什么?

java - 在 JFrame 中登录后显示 JButton

java - 如何将java项目转换为.exe?

java - 返回 200 响应代码而不是 204

java - 调用 Class.class.getClass() 时到底发生了什么?

java - JAXB 解码返回 Null