繁体   English   中英

从另一个类添加Swing组件

[英]Adding Swing components from another class

我正在学习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

菜单栏类:

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”加下划线,因此我无法编译代码。

我一直在寻找解决这个问题的方法,据我所知,这应该有效。

任何帮助表示赞赏。

谢谢

玩笑

请注意,您的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而不是依赖于组合的概念时,使用继承的概念(将菜单栏类扩展到JMenuBar,以便您的类可以像JMenuBar一样工作)。 关于设置JMenuBar,您也可以关注上面的帖子:

frame.setJMenuBar(menu.menuBar());

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

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

content.add(menubar.menuBar(), BorderLayout.NORTH);

menuBar方法返回menu

另外: setJMenuBar用于为JFrame设置JMenuBar

frame.setJMenuBar(menu.menuBar());

代替:

content.add(menu.menuBar(), BorderLayout.NORTH);

我想你的意思是:

content.add(menubar.menuBar(), BorderLayout.NORTH);

...但是仍然无法正常工作,因为此方法的返回类型void 它需要是JMenuBar

我觉得你:

  • 如果menubar.menubar()static函数,则不想创建new menubar()
  • 想要public static JMenuBar menubar() { ... } ,而不是无效
  • 想要menubar.menubar() return menu否则该方法只是一个昂贵的无操作

content.add(menu.menuBar(), ...)下划线,因为您不能将void方法用作另一个方法的参数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM