2017-01-23 13 views
1

Windows上で透明なjframeを取得する方法を知っていますか? MacOSで私は:(私はそれを行うことができますか?ウィンドウ上で透明なjframeを取得するには?

MacOSの例

enter image description here

Windowsの例

をこれらの行は、それがWindows上で動作しないようです

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

を使用してそれを得ました

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)'は不透明です。 '新しいColor(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

関連する問題