我刚刚开始使用Java,我有一个问题。我试着做一个简单的menuBar和一个menuItem 'Exit',但是在将按钮链接到menuItem显示的动作之前,既然我已经将按钮链接到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();
}我想问题在这里的某个地方,但我不知道在哪里。有什么帮助吗?(还有其他代码,但我只是放了更相关的部分,我还翻译了意大利语的代码,所以我很抱歉,如果有任何问题或几个名字不匹配)
发布于 2018-11-13 17:10:42
private Action actionExit;
public Action getActionExit() {
return actionExit;
}您的actionExit变量为空。
在代码中没有任何地方可以创建ActionExit类的实例。
你需要的地方:
actionExit = new ActionExit();您的设计似乎有点复杂,我不知道为什么只创建一个ActionExit类实例的面板。
我建议您只需在主类中创建ActionExit实例,并去掉PanelControl类。
与其使用IDE生成令人困惑的代码,不如考虑学习如何自己编写代码,以便更好地构造类。阅读有关如何使用菜单的Swing教程中的部分,以获得一个工作示例,以便您开始工作。
发布于 2018-11-13 17:24:11
菜单项必须添加到本机Java Swing组件中。您必须将其添加到JFrame中。不能将MenuItem添加到面板中。任何Java应用程序中的父“根”容器都是“本机”和JFrame。容器中的其他所有东西都是使用您选择的外观和感觉“绘制”到矩形中的。
然后使用您的MenuItem项创建一个TAbstractAction。该对象可用于创建JButton、JMenuItem或ToolBar按钮。在代码中保持对TAbstractAction的引用,可以启用/禁用对象,它实现了一个“可观察的”模式,在该模式中,它将启用/禁用用于使用它构建的所有UI控件。实际上,我为Java应用程序编写了一个Java Swing框架。它曾经出现在Sun开放源码网站上。如果你愿意的话,我可以把它放在GitLab上供你玩。JavaFX不错,但是JavaFX应该是JVM上UI的长期目标。
在您的JFrame对象中,您需要这样做:
_menuBar = new JMenuBar();
// add controls to the frame
setJMenuBar(_menuBar);然后,您需要将“exitMenuItem”添加到_MenuBar控件中。干杯
https://stackoverflow.com/questions/53286160
复制相似问题