我正在制作一个带有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教程。