java 将JMenuBar从另一个类添加到JFrame中

b09cbbtk  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(138)

我已经创建了一个包含基本JFrame的类和另一个包含JMenu代码的类,但是当我尝试在窗口类中调用JMenu时,我无法使用setJMenu()。我不确定我错过了什么,有人能帮助我吗?

Window.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Window {
    JFrame frame;

    Menubar m = new Menubar();

    Window(){
        frame = new JFrame("Test Frame");

        frame.setJMenuBar(m);
        frame.setSize(200, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Menubar {
    JMenuBar menubar;
    JMenu menu;
    JMenuItem item1;

    Menubar(){
        menubar = new JMenuBar();
        menu = new JMenu("File");
        item1 = new JMenuItem("item");

        menubar.add(menu);
        menu.add(item1);
        
    }
}

VS代码告诉我使用getJMenu,这也不起作用。

q0qdq0h2

q0qdq0h21#

您的问题很简单,您没有在MenuBar中公开JMenuBar
添加以下内容,而不是MenuBar()构造函数

public static JMenuBar createMenuBar(){
    menubar = new JMenuBar();
    menu = new JMenu("File");
    item1 = new JMenuItem("item");

    menubar.add(menu);
    menu.add(item1);
    return menu;
}

在窗口中

Window(){
    frame = new JFrame("Test Frame");
    frame.setJMenuBar(MenuBar.createMenuBar());

当然,问题是您没有将Action添加到菜单栏中的JMenuItem,这就是为什么在一个类中构建整个GUI通常更好的原因......除非您还添加API来执行诸如通过Window中的方法设置按钮的Action之类的操作

相关问题