2017-01-23 88 views
1

你知道如何在windows上获得透明的jframe吗?在MacOS我用这些线路如何在Windows上获得透明jframe?

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); 
+0

'new Color(1,1,1,1)'是不透明的白色。尝试'新颜色(1,1,1,0)' – Michael

回答

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

这对我有效。基本上用窗口来获得相同的结果我需要将我的按钮添加到面板,然后将面板添加到框架,而不是将我的按钮直接应用到框架。谢谢 – Monstercat

+0

完成和同样的事情......我发现这是导致按钮周围边框的网格布局......任何想法? – Monstercat

+0

@Monstercat它不是'GridLayout',它主要是按钮本身绘制边框,也许看看['JButton#setBorderPainted'](https://docs.oracle.com/javase/8/docs/api /javax/swing/AbstractButton.html#setBorderPainted-boolean-) – MadProgrammer