jMenuItem没有出现

时间:2018-11-13 17:05:37

标签: java swing

我刚刚开始使用Java Swing,但遇到了问题。 我试图做一个简单的menuBar和menuItem'Exit',但是在将按钮链接到动作之前,菜单项出现了,现在我已经将按钮链接到System.exit(0)动作,它消失了。救命? 代码如下:

MainPanel 中(不包括来自swing的自动生成的代码):

public void init() {
    initComponents();
    initActions();  

    setLocationRelativeTo(null); 
    pack();
    setVisible(true);
}

private void initActions() {
    this.menuItemExit.setAction(Application.getInstance().getPanelControl().getActionExit());

}

PanelControl 中:

public class PanelControl {

    private Action actionExit;


    public Action getActionExit() {
        return actionExit;
    }



public class ActionExit extends AbstractAction{

    public ActionExit(){
        putValue(Action.NAME, "Exit");
        putValue(Action.SHORT_DESCRIPTION, "Exit from the application");
        putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl e"));
        putValue(Action.MNEMONIC_KEY, KeyEvent.VK_E);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }

}

应用中:

private void init() {
    viewMainPanel = new MainPanel();
    controlPanel = new ControlPanel();
    viewMainPanel.init();

}

我认为问题出在这里,但我不知道在哪里。有什么帮助吗? (还有其他代码,但我只把最相关的部分,我也翻译了意大利语的代码,所以对不起,如果有任何问题或几个名称不匹配)

2 个答案:

答案 0 :(得分:0)

private Action actionExit;


public Action getActionExit() {
    return actionExit;
}

您的actionExit变量为空。

您在代码中的任何地方都没有创建ActionExit类的实例。

您需要的地方:

actionExit = new ActionExit();

您的设计似乎有点复杂,我不知道为什么您只有一个面板才能创建ActionExit类的实例。

我建议您仅在主类中创建ActionExit实例,并摆脱PanelControl类。

您应该考虑学习如何自己编写代码,而不是使用IDE来生成令人困惑的代码,以便更好地构造类。阅读有关How to Use Menus的Swing教程中的部分,以获取入门的实用示例。

答案 1 :(得分:0)

必须将菜单项添加到本机Java Swing组件。您必须将其添加到JFrame。您不能将MenuItem添加到面板中。任何Java Swing应用程序中的Parent“根”容器是“ native”和JFrame。使用您选择的外观,将容器中的所有其他内容“绘制”到矩形中。

然后,使用TAbstractAction项目创建一个MenuItem。该对象可用于创建JButton,JMenuItem或ToolBar按钮。在您的代码中保留对TAbstractAction的引用,您可以启用/禁用该对象,并实现“可观察”的模式,在该模式中,它将启用/禁用您用来与其构建的所有UI控件。我实际上写了一个Java Swing框架来执行Java应用程序。它曾经在Sun Open Source网站上。如果您愿意,我可以将它放在GitLab上供您使用。 Java Swing很不错,但JavaFX应该是JVM上UI的长期目标。

在JFrame对象中,您需要执行以下操作:

 _menuBar = new JMenuBar();

  // add controls to the frame
  setJMenuBar(_menuBar);

然后,您需要将'exitMenuItem'添加到_MenuBar控件中。 干杯