当前位置: 首页 > 知识库问答 >
问题:

JFrame中未显示菜单栏

曹德明
2023-03-14

我已经在我的 JFrame 中添加了一个自定义 JPane 和一个自定义 JMenuBar。JPane显示得很好,但JMenuBar不是。我已经在不同的类中定义了框架和菜单栏

下面是frame类:public类pixel frame {//这个框架将保存用于艺术创作的a pixelPane。这也将包含一个菜单栏,在另一个文件中定义。pixelPane编辑区域;pixelMenuBar菜单栏;public pixel frame(){ event queue . invokelater(new Runnable(){//在运行时创建一个新线程

        @Override
        public void run() {  //when the program runs, do the following
            JFrame frame = new JFrame("Pixel Art Creator");  //create a new JFrame (similar to a regular window), and give it the following title
            editingArea = new pixelPane();
            menuBar = new pixelMenuBar();
            frame.add(editingArea);  //add a pixelPane named editingArea to the JFrame
            frame.setJMenuBar(menuBar); //adds a menu to the JFrame
            frame.pack(); //make the window big enough to fit all components (in this case, editingArea)
            frame.setLocationRelativeTo(null); //set window to the center of the screen
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Stop the thread and terminate the program.
            frame.validate();
            frame.setVisible(true); //You can see the window.

            menuBar.setVisible(true);
        }

    });
}

public static void main(String[] args)
{
    pixelPane.gridEnabled = true; //changing another variable from pixelPane just for testing.
    new pixelFrame(); //create an instance of pixelFrame.
}

}

这是菜单栏:

public class pixelMenuBar extends JMenuBar {
/**
 * 
 */
private static final long serialVersionUID = 1L;
JMenuBar menuBar;
JMenu file, tool;
JMenuItem save, load, changeColor;
JCheckBoxMenuItem gLines;
public pixelMenuBar() {
    menuBar = new JMenuBar();

    //creates a "File" menu in the menu bar
    file= new JMenu("File");
    file.setMnemonic(KeyEvent.VK_F);
    menuBar.add(file); //add the menu to the menu bar

    //creates a "Tools" menu in the menu bar
    tool = new JMenu("Tools");
    tool.setMnemonic(KeyEvent.VK_T);
    menuBar.add(tool);


    //Menu items that go under the File menu
    save = new JMenuItem("Save File"); //save and export the image as an .svg file
    save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.CTRL_DOWN_MASK,KeyEvent.VK_S)); //a Ctrl+S hotkey. Handy dandy!
    file.add(save);//adds the Save button to the File menu

    load = new JMenuItem("Load File"); //load the file into BufferedImage, make it into a JLabel and add it to the panel.
    load.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.CTRL_DOWN_MASK,KeyEvent.VK_L));//a Ctrl+L hotkey. Also handy dandy!
    file.add(load);//adds the Load button to the File menu


    //Menu items that will go under the Tools menu
    gLines = new JCheckBoxMenuItem("Gridlines"); //creates a new checkbox for enabling grid lines. will toggle pixelPane.gridEnabled
    gLines.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.CTRL_DOWN_MASK,KeyEvent.VK_G));
    tool.add(gLines);//adds the gridlines tool to the Tools menu
    tool.addSeparator(); //adds a separating line in the Tools menu. Organization.

    changeColor = new JMenuItem("Change Color");//creates a new menu item that will let the user the color of the pixel. Uses a color picker
    tool.add(changeColor);//adds Change Color to the Tools menu
}

}

我没有正确向 UI 添加某些内容吗?我仔细检查我使用的是addJMenuBar()而不是addMenuBar()。

共有1个答案

明财
2023-03-14

首先,类名应该以大写字符开头。你有没有见过Java API中没有的类?遵循 Java 约定。以身作则。

public class pixelMenuBar extends JMenuBar 
{
...
public pixelMenuBar() 
{
    menuBar = new JMenuBar();

你的类“是一个” JMenuBar,但你在类中做的第一件事就是创建一个JMenuBar。

不要创建JMenuBar!

只需将菜单项添加到 JMenuBar 类本身:

//menuBar.add(file); //add the menu to the menu bar
add(file); //add the menu to the menu bar

实际上,甚至不需要PixelMenuBar类,因为您没有向JMenuBar添加任何新功能。只需在主类中添加一个方法,如createMenuBar(...),方法创建JMenuBar并添加JMenu/JMenuItem对象。

 类似资料:
  • 我知道同样的问题已经被问过很多次了,但是我似乎真的没有在我的代码中发现阻碍JPanel类型的对象显示在JFrame中的错误。下面是扩展JFrame的类的构造函数: 当我运行main方法(这里没有显示)时,它只显示框架和按钮。如果有人能在这方面给点提示,我会非常感谢的。

  • 我的问题是一个热门问题,我阅读并尝试了很多相关帖子,但我没有实现预期的结果,显示菜单。我还没有找到正确的解决方案。 我的应用程序可以在Android 4 . 2 . 2版本上完美运行。(版本代码17)我在Galaxy Duos手机上试用过。 我使用Android版本7,0(版本代码24)我尝试了更多目标SDK版本的变体,具有8,19,24,25并且没有目标SDK规范。 以下是一些相关的部分 -盖德

  • 我一直试图在Android Studio的底部应用程序栏中添加菜单项的标题和菜单图标。我试图设置: 但是它不起作用。只有图标显示出来。我还尝试制作自己的布局文件并使用actionLayout: 这也没用。 我想要的示例(图标下方有文本): 现在的样子: 我的活动的XML: 和我菜单的代码: 我试图创建自己的动作布局的代码(如果相关):

  • 你好 由于某些原因,该图标从未显示在操作栏上,我使用了ifRoom |与text的组合,但仍然没有显示。我也尝试过在风景中旋转。我正在使用genymotion 4.4.2 我正在膨胀菜单中的一个片段: 我在纵向和横向模式下尝试了硬件nexus5,但没有图标。 我也尝试过使用以下方法,但也不起作用: 非常感谢任何建议,

  • 一个没有显示添加到它的的问题。我已经尝试了,我已经切换到只添加,以使代码更短一些。任何帮助都是非常感谢的!

  • 问题内容: 我想通过按下JFrame中的按钮来启动另一个JFrame。但是,如果按Button,它将显示JFrame,但其中不显示Buttons和Sliders。 } 第二个具有完全相同的构造函数。滑块和按钮不是静态的。在应显示“按钮”的位置,屏幕为黑色。 希望你能帮我 :) 编辑: 问题答案: 做你最后一件事… 另外,在添加新组件时,使用和鼓励容器更新其布局。 建议: 确保您的用户界面在EDT上