2017-01-23 94 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