如何在Windows上获得透明的jframe?

时间:2017-01-23 14:02:25

标签: 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);

1 个答案:

答案 0 :(得分:0)

您很可能不在主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();
    }
}