从另一个类添加Swing组件(Adding Swing components from anothe

2019-09-30 06:19发布

我学习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);

“添加”有下划线,因此我不能编译代码。

我一直在寻找一种方式来解决这个问题,而据我所知这应该工作。

任何帮助表示赞赏。

谢谢

玩笑

Answer 1:

请注意,您的菜单栏()方法是一个void类型返回,因此没有价值,而内容(JPanel中),您使用的add()方法需要两个参数,这些参数(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

我对你的建议是与GUI在Java中处理,而不是取决于组成这个概念时使用继承的概念(扩展菜单栏类JMenuBar的,这样你的类可以像的JMenuBar)。 您也可以按照上面的帖子至于设置的JMenuBar:

frame.setJMenuBar(menu.menuBar());

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



Answer 2:

代替:

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

我想你的意思是这样的:

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

......但仍然不会起作用,因为这种方法的返回类型为void 。 它需要JMenuBar



Answer 3:

该方法menuBar有一个void的返回类型,因此并不适用于add方法。 所以你需要

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

而返回menumenuBar的方法

旁白: setJMenuBar用于设置一个JMenuBar一个JFrame

frame.setJMenuBar(menu.menuBar());


Answer 4:

我觉得你:

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

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

此外,你应该总是指静态字段或方法使用类,而不是一个实例。 和类名应以大写字母(开始Menu )。



文章来源: Adding Swing components from another class
标签: java swing class