java - 如何使 JMenu 项在单击时执行某些操作

标签 java swing user-interface jmenu jmenuitem

我正在制作一个带有 Jmenu 的 GUI;它具有 jmenu 项目,单击时将执行这些操作。那就是问题所在。我看了又看,但我无法找到如何让它在单击时执行某些操作。另外,我有点菜鸟,所以如果你能以一种非常简单的方式做到这一点,那就太好了!

代码如下:

import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.*;

public abstract class windowMaker extends JFrame implements ActionListener {
private JMenu menuFile;

public static void main(String[] args) {
    createWindow();

}

public static void createWindow() {
    JFrame frame = new JFrame();
    frame.setTitle("*Game Title* Beta 0.0.1");
    frame.setSize(600, 400);
    frame.setLocation(100, 100);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setJMenuBar(windowMaker.menuBarCreator());
    frame.add(windowMaker.setTitle());
}

public static void launchURL(String s) {
    String s1 = System.getProperty("os.name");
    try {

        if (s1.startsWith("Windows")) {
            Runtime.getRuntime()
                    .exec((new StringBuilder())
                            .append("rundll32   url.dll,FileProtocolHandler ")
                            .append(s).toString());
        } else {
            String as[] = { "firefox", "opera", "konqueror",   "epiphany",
                    "mozilla", "netscape" };
            String s2 = null;
            for (int i = 0; i < as.length && s2 == null; i++)
                if (Runtime.getRuntime()
                        .exec(new String[] { "which", as[i]   }).waitFor() == 0)
                    s2 = as[i];

            if (s2 == null)
                throw new Exception("Could not find web browser");
            Runtime.getRuntime().exec(new String[] { s2, s });
        }
    } catch (Exception exception) {
        System.out
                .println("An error occured while trying to open the            web browser!\n");
    }
}

public static  JMenuBar menuBarCreator() {
    // create the menu parts
    JMenuBar menuBar = new JMenuBar();
    JMenu menuFile = new JMenu("File");
    JMenu menuHelp = new JMenu("Help");
    JMenuItem menuFileWebsite = new JMenuItem("Website");
    JMenuItem menuFileExit = new JMenuItem("Exit");
    JMenuItem menuHelpRules = new JMenuItem("Rules");
    JMenuItem menuHelpAbout = new JMenuItem("About");
    JMenuItem menuHelpHow = new JMenuItem("How To Play");

    // make the shortcuts for the items
    menuFile.setMnemonic(KeyEvent.VK_F);
    menuHelp.setMnemonic(KeyEvent.VK_H);

    // put the menu parts with eachother
    menuBar.add(menuFile);
    menuBar.add(menuHelp);
    menuFile.add(menuFileWebsite);
    menuFile.add(menuFileExit);
    menuHelp.add(menuHelpRules);
    menuHelp.add(menuHelpAbout);
    menuHelp.add(menuHelpHow);


    return menuBar;
}

public static Component setTitle() {
    JLabel title = new JLabel("Welcome To *the game*");
    title.setVerticalAlignment(JLabel.TOP);
    title.setHorizontalAlignment(JLabel.CENTER);
    return title;
}

}

顺便说一句:我希望网站选项(让我们暂时使用它)使用 launchURL 方法;我知道一个有效。

最佳答案

JMenuItem 是按钮的一种形式 (AbstractButton)。正常模式是使用 Action 构造您的按钮(请参阅 JMenuItem 的构造函数)。 Action 定义要执行的名称和操作。大多数人扩展 AbstractAction 并实现 actionPerformed,它在按下按钮时被调用。

一个可能的实现可能是这样的:

JMenuItem menuItem = new JMenuItem(new AbstractAction("My Menu Item") {
    public void actionPerformed(ActionEvent e) {
        // Button pressed logic goes here
    }
});

或:

JMenuItem menuItem = new JMenuItem(new MyAction());
...
public class MyAction extends AbstractAction {
    public MyAction() {
        super("My Menu Item");
    }

    public void actionPerformed(ActionEvent e) {
        // Button pressed logic goes here
    }
}

请注意,我上面所说的一切也适用于 JButton。也看看 Java 很有帮助的 How to Use Actions教程。

关于java - 如何使 JMenu 项在单击时执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778621/

相关文章:

java - java中的双数字格式化

Java套接字一直卡住

java - 覆盖默认外观 Java

java - 使用 SwingWorker 打开 JDialog?

java - 如何将 GUI 添加到此 java 程序中?

java - JFace 向导 : How to have the Progress Bar not disabling the Wizard GUI

java - 我怎样才能让我的 do while 循环按照我想要的方式工作?

Java KeyListener 丢弃小写字母

java - DefaultFormatter的覆盖模式描述不清楚

java - 慢慢地画一条线