你知道如何在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);
答案 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();
}
}