没有任何错误,但程序只显示单词" menu"在程序的顶部。它不会显示3 JMenu
个项目:" home"," about"和"探索"。
JPanel p5 = new JPanel(new GridBagLayout());
p5.setVisible(true);
fw.add(p5, BorderLayout.PAGE_START);
JMenu menu = new JMenu("Menu");
menu.setVisible(true);
menu.add("home");
menu.add("about");
menu.add("explore");
JMenuBar menubar = new JMenuBar();
fw.setJMenuBar(menubar); //ADDED THIS LINE. STILL DOESN'T WORK.
menubar.setVisible(true);
menubar.add(menu);
p5.add(menu);
我已将JMenu
添加到JMenuBar
(所有JMenu
,JMenubar
和JPanel
设置为可见)。我还将JPanel(p5)添加到"第一个窗口(fw)并将菜单添加到p5。我不确定为什么我的菜单项没有显示。
更新:根据要求提供MCVE(最小完整和可验证示例)。
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
public class TestingClass extends JFrame {
public static void main(String[] args) {
FirstWindow fw = new FirstWindow();
fw.setSize(400, 600);
fw.setDefaultCloseOperation(EXIT_ON_CLOSE);
fw.setVisible(true);
JPanel p5 = new JPanel(new GridBagLayout());
p5.setVisible(true);
fw.add(p5);
JMenu menu = new JMenu("Menu");
menu.setVisible(true);
menu.add("home");
menu.add("about");
menu.add("explore");
JMenuBar menubar = new JMenuBar();
fw.setJMenuBar(menubar); // THE UPDATED LINE OF CODE.
menubar.setVisible(true);
menubar.add(menu);
p5.add(menu);
}
}
当你运行程序时,你会看到单词" menu"显示。项目:"家庭,关于和探索"来自JMenu
的信息不会显示。有人知道我做错了什么吗?
答案 0 :(得分:3)
您需要将menuBar添加到框架中:
frame.setJMenuBar( menuBar );
此外,您不需要让Swing组件可见,因为默认情况下它们是可见的(顶级包含,例如您需要设置可见的JFrame)。
答案 1 :(得分:3)
运行时问题的MCVE应该干净地编译。这显示了3个编译错误。一个是缺少导入(容易修复),但另外两个与缺少的FirstWindow
相关。
然而,一旦做了一些调整,问题就变得清晰了。组件只能出现在一个地方。通过将其添加到面板(下面已注释),它也不会出现在菜单中。
import java.awt.*;
import javax.swing.*;
public class TestingClass extends JFrame {
public static void main(String[] args) {
JFrame fw = new JFrame();
fw.setSize(400, 200); // for screenshot
fw.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel p5 = new JPanel(new GridBagLayout());
p5.setVisible(true);
fw.add(p5);
JMenu menu = new JMenu("Menu");
//menu.setVisible(true);
menu.add("home");
menu.add("about");
menu.add("explore");
JMenuBar menubar = new JMenuBar();
fw.setJMenuBar(menubar); // THE UPDATED LINE OF CODE.
//menubar.setVisible(true);
menubar.add(menu);
//p5.add(menu); // WTF?
fw.setVisible(true); //should be done after all components are added
}
}
答案 2 :(得分:-2)
添加组件后需要调用setVisible(
)!首先添加所有组件。将最高级别的组件添加到JFrame
(您的情况为JPanel
)和setVisible()
的唯一电话JFrame
。无需调用每个组件。
JMenu menu = new JMenu("Menu");
menu.add("home");
menu.add("about");
menu.add("explore");
//rest of the components
//add panelto the frame
frame.getContentPane.add(p5);
//set menubar for the frame
frame.setJMenuBar( menuBar );
//set visibility for frame to true
frame.setVisible(true);