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

Java 如何在windows上获得透明的jframe?,java,swing,jframe,Java,Swing,Jframe,你知道如何在windows上获得透明的jframe吗?在macOS上,我是通过这些线路得到的 frame.setUndecorated(true); frame.setBackground(new Color(1,1,1,1)); 它似乎在windows上不起作用:(我怎么做 MacOS示例 Windows示例 我的代码: frm_languageSelector = new JFrame(); pnl_buttons = new JPanel(); frm_la

你知道如何在windows上获得透明的jframe吗?在macOS上,我是通过这些线路得到的

frame.setUndecorated(true);
frame.setBackground(new Color(1,1,1,1));
它似乎在windows上不起作用:(我怎么做

MacOS示例

Windows示例

我的代码:

    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上设置set不透明

这管用,祝你好运

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();
    }
}

您很可能没有在主JPanel上设置set不透明

这管用,祝你好运

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();
    }
}

新颜色(1,1,1,1)
为不透明白色。请尝试
新颜色(1,1,1,0)
新颜色(1,1,1,1)为不透明白色。请尝试
新颜色(1,1,1,0)
这对我很有效。基本上,对于windows,要获得相同的结果,我需要将我的按钮添加到面板,然后将面板添加到框架,而不是将我的按钮直接应用到框架。感谢一件事和同样的事情…我发现是网格布局导致按钮周围出现边框…有什么想法吗?@Monstercat它不是
GridLayout
,主要是按钮本身在绘制边框,也许你可以看看仅仅发布一个小的演示代码是不起作用的,否则就很难帮上忙了。@Beowolve我添加了我的代码。在macOS上它可以正常工作,在windows上则不能。我不知道确切的原因是什么不起作用,但我知道在windows上透明不起作用我。基本上,windows要获得相同的结果,我需要将我的按钮添加到面板,然后将面板添加到框架,而不是将我的按钮直接应用到框架。感谢一件事……我发现是网格布局导致了按钮周围的边框……有什么想法吗?@Monstercat这不是
网格布局
,主要是正在绘制边界的tons自己,也许可以看一看,只需发布一个小的演示代码就行了,否则很难提供帮助。@Beowolve我添加了我的代码。在macOS上它可以正常工作,在windows上则不行。我不清楚什么不起作用,但我知道在windows上透明不起作用