該問題看起來很簡單,但我似乎無法解決它。Java - 使用玻璃面板隱藏JMenuBar
我在我的框架(也是ContentPane)中使用GlassPane。所以當我將JMenuBar添加到框架中時,它不會顯示出來。如果/當我在其他時間使用GlassPane時,一切都可以正常工作。我做了一些研究,我的理解是JMenuBar顯示在RootPane上,我相信GlassPane以某種方式隱藏它。
我需要知道在使用glassPane時是否有任何方法獲得JMenuBar?
感謝
更新: 我設置glassPane.setOpaque(假)
UPDATE:
的代碼中實際的線條更加但是這裏是相對於問題的那些。 (mainPanel中和notificationPanel從JPanel的擴展自構造類)和
public class Demo extends JFrame {
/////////////////////////////////////////////////////////////////////////
// JMenuBar
private final JMenuBar mainMenuBar;
private final JMenu fileMenu;
private final JMenuItem exitFileMenu;
/////////////////////////////////////////////////////////////////////////
// CONTENT PANE & COMPONENTS
private final JPanel contentPanel;
private final JPanel buttonPanel;
private final JButton button1;
/////////////////////////////////////////////////////////////////////////
// GLASSPANE AND COMPONENTS
private final JPanel glassPanel;
private final JPanel buttonPanel2;
private final JButton button2;
public Demo() {
super();
this.mainMenuBar = new JMenuBar();
this.fileMenu = new JMenu("File");
this.exitFileMenu = new JMenuItem("EXIT");
this.contentPanel = new JPanel(new BorderLayout());
this.buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
this.button1 = new JButton("Button 1");
this.glassPanel = new JPanel(new BorderLayout());
this.buttonPanel2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
this.button2 = new JButton("Button 2");
}
public void initGUI() {
this.fileMenu.add(this.exitFileMenu);
this.mainMenuBar.add(this.fileMenu);
this.buttonPanel.add(this.button1);
this.contentPanel.add(this.buttonPanel, BorderLayout.NORTH);
this.buttonPanel2.add(this.button2);
this.glassPanel.add(this.buttonPanel2, BorderLayout.NORTH);
super.setContentPane(this.contentPanel);
super.setGlassPane(this.glassPanel);
this.glassPanel.setOpaque(false);
this.glassPanel.setVisible(true);
super.setExtendedState(JFrame.MAXIMIZED_BOTH);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.setJMenuBar(mainMenuBar);
super.setVisible(true);
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.initGUI();
}
}
請提供任何代碼來重現您的問題 – 2014-11-23 22:31:04
@SergiyMedvynskyy我添加了一些代碼行和屏幕快照。 – Abbas 2014-11-23 22:54:50
@ AbbasA.Ali *「一些代碼行」*不能生成可運行的示例。如果我們無法複製您的問題,我們不太可能解決它。一切都是猜測工作。考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它可以證明你的問題。這會減少混淆和更好的反應 – MadProgrammer 2014-11-23 23:03:29