Java JMenu不可见
我的JFrame中有一个JMenu和JPanel 设置代码:Java JMenu不可见,java,swing,button,Java,Swing,Button,我的JFrame中有一个JMenu和JPanel 设置代码: public Gui(String title) { super(title); createGUIComponents(); pack(); this.setBackground(Color.WHITE); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setResizable(true); this.setMini
public Gui(String title) {
super(title);
createGUIComponents();
pack();
this.setBackground(Color.WHITE);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(true);
this.setMinimumSize(new Dimension(180, 100));
this.setSize(new Dimension(800, 600));
this.setVisible(true);
}
private void createGUIComponents() {
Container c = this.getContentPane();
JPanel panel = new SpecialJPanel();
JMenuBar menu = new JMenuBar();
fileMenu = new JMenu("File", false);
fileMenu.add("New");
fileMenu.add("Open");
fileMenu.add("Save");
fileMenu.add("Save As");
c.add(panel, "Center");
c.add(menu, "Center");
}
每当我单击JMenuBar上的文件菜单按钮时,都不会显示任何内容。我认为它被JPanel屏蔽了,JPanel正在不断更新。有什么办法可以解决这个问题吗?您没有将菜单添加到菜单栏,所以添加这一行:
menu.add(fileMenu);
另外,您应该使用
setJMenuBar(menu);
您没有将菜单添加到菜单栏,因此请添加以下行:
menu.add(fileMenu);
另外,您应该使用
setJMenuBar(menu);
JFrame
的标准布局是BorderLayout
BorderLayout
提供了5个区域,每个区域可以接受1组件李>
因此,当代码显示:
c.add(panel, "Center");
c.add(menu, "Center");
它应该读得更像:
c.add(panel, BorderLayout.CENTER); // Don't use magic numbers!
c.add(menu, BorderLayout.PAGE_START);
话虽如此,
JFrame
有一种更好的方式来显示JMenuBar
,详见
JFrame
的标准布局是BorderLayout
BorderLayout
提供了5个区域,每个区域可以接受1组件李>
因此,当代码显示:
c.add(panel, "Center");
c.add(menu, "Center");
它应该读得更像:
c.add(panel, BorderLayout.CENTER); // Don't use magic numbers!
c.add(menu, BorderLayout.PAGE_START);
话虽如此,
JFrame
有一种更好的方式来显示JMenuBar
,详细内容见。它仍然没有显示,但感谢您指出这一点。另外,它应该是这样的。setJMenuBar(menu)@jakesumerican,不需要“this”。+1表示忽略了OP试图做的事情,而是显示了一个更好的方法。它仍然没有显示,但感谢您指出这一点。另外,它应该是这样的。setJMenuBar(menu)@jakesumerican,不需要“this”。+1表示忽略OP试图做的事情,而是显示了一个更好的方法。我认为它被JPanel阻止了,JPanel正在不断更新
-然后也许你应该发布一个适当的SSCE,以便我们可以看到你在做什么。如果您认为这是问题所在,那么停止更新,看看会发生什么<代码>c.添加(面板,“中心”)代码>-不要对约束使用字符串文字。使用BorderLayout类中正确的静态变量。为了更快地获得更好的帮助,请发布一个。我认为它被JPanel阻止了,JPanel正在不断更新
-然后也许你应该发布一个正确的SSCE,以便我们可以看到你在做什么。如果您认为这是问题所在,那么停止更新,看看会发生什么<代码>c.添加(面板,“中心”)代码>-不要对约束使用字符串文字。使用在BorderLayout类中找到的正确静态变量。为了更快地获得更好的帮助,请发布一个。我尝试过这个方法,但它只是在消失之前短暂显示。但是,实际的菜单按钮仍然处于选中状态,那么您如何允许菜单在其上显示?我已经尝试过了,但它只是在消失之前短暂显示。但是,实际的菜单按钮仍处于选中状态,因此您如何允许菜单显示在其上?