Java 从另一个类添加Swing组件

Java 从另一个类添加Swing组件,java,swing,class,Java,Swing,Class,我正在学习java,我正在尝试从另一个类向我的框架中添加一个菜单栏(练习将代码划分为多个类以更好地组织程序) 以下是我的代码示例: public class MainApp { public static void main(String[] args) { // Create window JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fra

我正在学习java,我正在尝试从另一个类向我的框架中添加一个菜单栏(练习将代码划分为多个类以更好地组织程序)

以下是我的代码示例:

public class MainApp {

public static void main(String[] args) {
    // Create window
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(600, 400);

    // Create main panel
    JPanel content = new JPanel();
    content.setLayout(new BorderLayout());
    frame.add(content);

    //Create menu bar
    menubar menu = new menubar();
    content.add(menu.menuBar(), BorderLayout.NORTH);
            //Other stuff...

} // Ends main method
} // Ends MainApp class
和menubar类:

public class menubar {
public static void menuBar(){
    JMenuBar menu = new JMenuBar();
    JMenu file = new JMenu("File");
        JMenuItem clear = new JMenuItem("New");
        JMenuItem exit = new JMenuItem("Exit");
    JMenu help = new JMenu("Help");
        JMenuItem about = new JMenuItem("About");
        JMenuItem instructions = new JMenuItem("Instructions");
} // Ends method menuBar
} // Ends class menubar
我使用eclipse,在这行中:

content.add(menu.menuBar(), BorderLayout.NORTH);
“add”带下划线,因此我无法编译代码

我一直在寻找解决这个问题的方法,据我所知,这应该是可行的

感谢您的帮助

多谢各位


Josh

方法
menuBar
具有
void
返回类型,因此不适用于
add
方法。所以你需要

content.add(menubar.menuBar(), BorderLayout.NORTH);
menuBar
方法返回
菜单时

旁白:用于为
JFrame
设置
JMenuBar

frame.setJMenuBar(menu.menuBar());

方法
menuBar
具有
void
返回类型,因此不适用于
add
方法。所以你需要

content.add(menubar.menuBar(), BorderLayout.NORTH);
menuBar
方法返回
菜单时

旁白:用于为
JFrame
设置
JMenuBar

frame.setJMenuBar(menu.menuBar());
而不是:

content.add(menu.menuBar(), BorderLayout.NORTH);
我想你的意思是:

content.add(menubar.menuBar(), BorderLayout.NORTH);
…但这仍然不起作用,因为此方法的返回类型是
void
。它需要是
JMenuBar

,而不是:

content.add(menu.menuBar(), BorderLayout.NORTH);
我想你的意思是:

content.add(menubar.menuBar(), BorderLayout.NORTH);
…但这仍然不起作用,因为此方法的返回类型是
void
。它必须是
JMenuBar

我想你:

  • 如果
    menubar,则不想创建
    new menubar()
    。menubar()
    是一个
    static
    函数
  • 想要
    公共静态JMenuBar menubar(){…}
    ,而不是void
  • 想要
    menubar.menubar()
    to
    return menu
    否则,这种方法就是一种昂贵的无操作方法
content.add(menu.menuBar(),…)
带下划线,因为不能将
void
方法用作另一个方法的参数

此外,应该始终使用类而不是实例引用静态字段或方法。类名应该以大写字母(
菜单
)开头。

我想你:

  • 如果
    menubar,则不想创建
    new menubar()
    。menubar()
    是一个
    static
    函数
  • 想要
    公共静态JMenuBar menubar(){…}
    ,而不是void
  • 想要
    menubar.menubar()
    to
    return menu
    否则,这种方法就是一种昂贵的无操作方法
content.add(menu.menuBar(),…)
带下划线,因为不能将
void
方法用作另一个方法的参数


此外,应该始终使用类而不是实例引用静态字段或方法。类名称应该以大写字母(
Menu
)开头。

请注意,您的menuBar()方法是void类型,因此没有返回值,而您使用的add()内容方法(JPanel)需要两个参数,它们是(JComponent类型)[请注意,JMenuBar是JComponent]int的子类[用于布局]

content.add(menu.menuBar(), BorderLayout.NORTH);
下面是代码的快速修复:

public class menubar {
public static JMenuBar menuBar(){
    JMenuBar menu = new JMenuBar();
    JMenu file = new JMenu("File");
        JMenuItem clear = new JMenuItem("New");
        JMenuItem exit = new JMenuItem("Exit");
    JMenu help = new JMenu("Help");
        JMenuItem about = new JMenuItem("About");
        JMenuItem instructions = new JMenuItem("Instructions");
    return menu;
} // Ends method menuBar
} // Ends class menubar
我给您的建议是,在处理Java中的GUI时,使用继承的概念(将menubar类扩展到JMenuBar,以便您的类可以像JMenuBar一样工作),而不是依赖于组合的概念。关于设置JMenuBar,您也可以遵循上面的帖子:

frame.setJMenuBar(menu.menuBar());

如果您是Java编程新手,您需要开始练习Java编码标准,特别是类和方法的正确命名。类名的第一个字母应大写,而方法名上至少应有一个动词。:)

注意菜单栏()方法是void类型,因此未返回任何值,而您使用的add()内容方法(JPanel)需要两个参数,即(JComponent类型[注意JMenuBar是JComponent的子类],int[用于布局目的])

content.add(menu.menuBar(), BorderLayout.NORTH);
下面是代码的快速修复:

public class menubar {
public static JMenuBar menuBar(){
    JMenuBar menu = new JMenuBar();
    JMenu file = new JMenu("File");
        JMenuItem clear = new JMenuItem("New");
        JMenuItem exit = new JMenuItem("Exit");
    JMenu help = new JMenu("Help");
        JMenuItem about = new JMenuItem("About");
        JMenuItem instructions = new JMenuItem("Instructions");
    return menu;
} // Ends method menuBar
} // Ends class menubar
我给您的建议是,在处理Java中的GUI时,使用继承的概念(将menubar类扩展到JMenuBar,以便您的类可以像JMenuBar一样工作),而不是依赖于组合的概念。关于设置JMenuBar,您也可以遵循上面的帖子:

frame.setJMenuBar(menu.menuBar());
如果您是Java编程新手,您需要开始练习Java编码标准,特别是类和方法的正确命名。类名称的第一个字母应大写,而方法名称上至少应有一个动词。:)