【问题标题】:Java create menu in another class, add to frameJava在另一个类中创建菜单,添加到框架
【发布时间】:2015-05-04 09:42:50
【问题描述】:

我尝试在另一个类中创建一个菜单并将其添加到我的框架中,但它不起作用(没有添加)。你能帮我看看代码有什么问题吗,谢谢。

类测试:

public class Test extends JFrame {

    public Test() {                
        MenuBar menuBar = new MenuBar();                
        setJMenuBar(menuBar);            
        pack();
        setVisible(true);
    }
 }

类菜单:

public class MenuBar extends JMenuBar {

    JMenuBar menuBar;
    JMenu menu;

    public MenuBar() {
        menuBar = new JMenuBar();
        menu = new JMenu("File");
        menuBar.add(menu);            
        MenuItem menuItem = new MenuItem();
        menu.add(menuItem);   
    }
}

类菜单项:

public class MenuItem extends JMenuItem {

    JMenuItem menuItemUndo;
    JMenuItem menuItemRedo;

    public MenuItem() {
        menuItemUndo = new JMenuItem("Undo");
        menuItemRedo = new JMenuItem("Redo");
    }    
 }

【问题讨论】:

  • 在没有添加任何功能的情况下,为什么要创建JMenuBarJMenuItem 的新子类?

标签: java menuitem menubar


【解决方案1】:

MenuBar 扩展了JMenuBar,因此您不必在其构造函数中创建新的JMenuBar。这更有意义:

public class MenuBar extends JMenuBar {

    JMenu menu;

    public MenuBar() {
        menu = new JMenu("File");
        this.add(menu);            
        .....
    }
}

MenuItem 类也是如此。

public class Undo extends JMenuItem {

    public MenuItem() {
        this.setText("Undo");
    }    
}

【讨论】:

  • 谢谢!但是我现在如何将 actionListeners 添加到每个 menuItem 中?
  • 与将它们添加到 JMenuBarJMenuItem 的方式相同,更多详细信息 here
【解决方案2】:
class Test extends JFrame {

    public Test() {                
        MenuBar menuBar = new MenuBar();                
        setJMenuBar(menuBar);            
        pack();
        setVisible(true);
    }
 }


class MenuBar extends JMenuBar {

    JMenu menu;
    JMenuItem menuItemUndo;
    JMenuItem menuItemRedo;

    public MenuBar() {
        menu = new JMenu("File");
        menuItemUndo = new JMenuItem("Undo");
        menuItemRedo = new JMenuItem("Redo");
        menu.add(menuItemUndo);  
        menu.add(menuItemRedo);
        this.add(menu);   
    }
    public static void main(String[] args) {
        new Test();
    }
}

运行这个程序。我认为它会给你想要的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2014-01-31
    相关资源
    最近更新 更多