关于菜单点击没反应

我的职业是看店铺的 2011-06-09 01:55:47
今天写了个程序,主要是用到菜单,不过不知道为什么,点击菜单里的退出后,确没有任何的反应。程序没办法关闭。另外,我想让“难度”菜单变成复选框菜单,但是不会设置,高手帮忙下
我的菜单设计如下所示

选择 难度 帮助
开始游戏 简单 帮助
重新开始 中等 关于五子棋
------- 困难
退出

我不知道怎么写才能实现功能,高手们帮忙下!谢谢了

import java.awt.*;
import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class Gobang extends JFrame
{
static Gobang gobang = new Gobang();
static JMenuBar menuBar = new JMenuBar(); //创建菜单条类
static JMenu menu = new JMenu("选择");
static JMenu menu_difficulty = new JMenu("难度"); //英汉互译 difficulty 难度
static JMenu Menu_About = new JMenu("帮助"); //还未实现
//选择
static JMenuItem menuStart = new JMenuItem("开始游戏");
static JMenuItem menuReStart = new JMenuItem("重新开始");
static JMenuItem menuExit = new JMenuItem("退出");
//难度
static JMenuItem easy = new JMenuItem("简单"); //创建复选框选项
static JMenuItem secondary = new JMenuItem("中等");
static JMenuItem difficulty = new JMenuItem("困难");
//帮助
static JMenuItem help = new JMenuItem("帮助");
static JMenuItem about = new JMenuItem("关于五子棋");

static PopupMenu pm = new PopupMenu(""); //创建弹出式菜单 //here

// static JMenuItem esay, secondary, difficulty; //设置难度为弹出式菜单

public static void main(String args[])
{
gobang.setLayout(null); //取消页面设置
gobang.setLocation(100, 80);
gobang.setSize(750, 600);

//菜单栏添加
menu.add(menuStart); //选择菜单添加
menu.add(menuReStart);
menu.addSeparator(); //加一条下划线
menu.add(menuExit);

menu_difficulty.add(easy); //难度菜单添加
menu_difficulty.add(secondary);
menu_difficulty.add(difficulty);

Menu_About.add(help); //关于菜单添加
Menu_About.add(about);

menuBar.add(menu);
menuBar.add(menu_difficulty);
menuBar.add(Menu_About);
gobang.add(menuBar);

gobang.setJMenuBar(menuBar); //设置菜单栏为menuBar,也就是总菜单栏

Container contentPane = gobang.getContentPane();
final Panel panel = new Panel();
gobang.setBackground(new Color(255, 182, 147));
contentPane.setBackground(new Color(255, 182, 147));
contentPane.add(panel);
gobang.setResizable(false);
panel.setCursor(new Cursor(Cursor.HAND_CURSOR));
gobang.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

gobang.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
JMenuItem mi = (JMenuItem)e.getSource(); //取得引发事件的对象
String miLab = mi.getLabel(); //取得菜单项的文字标题
if(miLab == "关于五子棋" )
{

}
else if(miLab == "帮助" )
{
JOptionPane.showMessageDialog(null, "木有帮助"); //打开不了网页
ProcessBuilder Tomlive = new ProcessBuilder("iexplore.exe",
"http://hi.csdn.net/space-5376767.html");
ProcessBuilder Gobang_skill = new ProcessBuilder("iexplore.exe",
"http://club.topsage.com/thread-799722-1-1.html");
}
else if(miLab == "开始游戏")
{
}
else if(miLab == "重新开始")
{
}
else if(miLab == "退出")
{
System.exit(0);
}
else if(miLab == "简单")
{
}
else if(miLab == "中等")
{
}
else if(miLab == "困难")
{
}
}
}







...全文
319 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
其实我看JAVA不到1个星期的!所以很多不会
谢谢大家
uastation 2011-06-09
  • 打赏
  • 举报
回复
楼上所说,同意~
安心逍遥 2011-06-09
  • 打赏
  • 举报
回复
没有监听器,加一个
wenbodong 2011-06-09
  • 打赏
  • 举报
回复
另外,说一下你程序的结构,你所有的组件全是static的,这样是不太好的。假设你的这个窗口类需要同时打开多个,你这样就会出问题。下面也是一个菜单程序,所有组件都是非静态成员变量。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* 2011-6-7 16:45:55
* @author Administrator
*/
public class TJMenu {
JFrame frame;
Container contentPane;
JMenuBar menuBar;
JMenu fileMenu,editMenu,helpMenu;
JMenuItem fmOpen,fmClose,fmNew;
JMenuItem emUndo,emCut,emCopy,emFind;
JLabel label;
public TJMenu(){
frame=new JFrame("菜单测试");
contentPane=frame.getContentPane();
setMenu();
contentPane.add(menuBar,BorderLayout.NORTH);
label=new JLabel("没有操作");
label.setHorizontalAlignment(JLabel.CENTER);
label.setPreferredSize(new Dimension(400,400));
contentPane.add(label,BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void setMenu(){
menuBar=new JMenuBar();
fileMenu=new JMenu("文件(F)");
fileMenu.setMnemonic('f');
editMenu=new JMenu("编辑(E)");
editMenu.setMnemonic('e');
helpMenu=new JMenu("帮助(H)");
helpMenu.setMnemonic('h');
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(helpMenu);
fmOpen=new JMenuItem("打开(o)", 'o');
fmOpen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
label.setText("打开");
}
});
fmOpen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
fmClose=new JMenuItem("关闭(c)",'c');
fmClose.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
label.setText("关闭");
}
});
fmNew=new JMenuItem("新建(n)",'n');
fmNew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
label.setText("新建");
}
});
fileMenu.add(fmOpen);
fileMenu.add(fmNew);
fileMenu.add(fmClose);
emFind=new JMenuItem("查找(F)",'f');
emFind.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
label.setText("查找");
}
});
emCut=new JMenuItem("剪切(T)",'t');
emCut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
label.setText("剪切");
}
});
emCopy=new JMenuItem("复制(C)",'c');
emCopy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
label.setText("复制");
}
});
editMenu.add(emFind);
editMenu.add(emCopy);
editMenu.add(emCut);
}
public static void main(String args[]){
new TJMenu();
}
}
wenbodong 2011-06-09
  • 打赏
  • 举报
回复
你没有给菜单项添加监听器,当然没反应了。而且,你的Gobang没有继承ActionListener,所以你的actionPerformed方法也是无效的。另外,你在actionPerformed中用==比较菜单的文本是不是某个值,这显然是不会相等的,==比较的是两个引用是否引用同一个对象,而不是比较两个引用所有指向的对象的内容,应该改为eqauls。
下面是我修改后的程序,注意看其中的一些注释。

import java.awt.*;
import java.awt.event.*;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;

public class Gobang extends JFrame implements ActionListener
{
static Gobang gobang = new Gobang();
static JMenuBar menuBar = new JMenuBar(); //创建菜单条类
static JMenu menu = new JMenu("选择");
static JMenu menu_difficulty = new JMenu("难度"); //英汉互译 difficulty 难度
static JMenu Menu_About = new JMenu("帮助"); //还未实现
//选择
static JMenuItem menuStart = new JMenuItem("开始游戏");
static JMenuItem menuReStart = new JMenuItem("重新开始");
static JMenuItem menuExit = new JMenuItem("退出");
//难度
static JRadioButtonMenuItem easy = new JRadioButtonMenuItem("简单"); //创建复选框选项
static JRadioButtonMenuItem secondary = new JRadioButtonMenuItem("中等");
static JRadioButtonMenuItem difficulty = new JRadioButtonMenuItem("困难");
//帮助
static JMenuItem help = new JMenuItem("帮助");
static JMenuItem about = new JMenuItem("关于五子棋");

static PopupMenu pm = new PopupMenu(""); //创建弹出式菜单 //here

// static JMenuItem esay, secondary, difficulty; //设置难度为弹出式菜单

public static void main(String args[])
{
gobang.setLayout(null); //取消页面设置
gobang.setLocation(100, 80);
gobang.setSize(750, 600);
//给菜单项注册监听器
menuExit.addActionListener(gobang);
//.......
//其他的组件我就不添加了,你自己添加吧
//对于三个难度的JRadioButtonMenuItem,需要添加ButtonGroup以使得只能选中三个之一
//说明一下,用JCheckBoxMenuItem不合适,不应用是复选,难度当然应该是单选
ButtonGroup bg=new ButtonGroup();
bg.add(easy);
bg.add(secondary);
bg.add(difficulty);
//菜单栏添加
menu.add(menuStart); //选择菜单添加
menu.add(menuReStart);
menu.addSeparator(); //加一条下划线
menu.add(menuExit);

menu_difficulty.add(easy); //难度菜单添加
menu_difficulty.add(secondary);
menu_difficulty.add(difficulty);

Menu_About.add(help); //关于菜单添加
Menu_About.add(about);

menuBar.add(menu);
menuBar.add(menu_difficulty);
menuBar.add(Menu_About);
gobang.add(menuBar);

gobang.setJMenuBar(menuBar); //设置菜单栏为menuBar,也就是总菜单栏

Container contentPane = gobang.getContentPane();
final Panel panel = new Panel();
gobang.setBackground(new Color(255, 182, 147));
contentPane.setBackground(new Color(255, 182, 147));
contentPane.add(panel);
gobang.setResizable(false);
panel.setCursor(new Cursor(Cursor.HAND_CURSOR));
gobang.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

gobang.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
JMenuItem mi = (JMenuItem)e.getSource(); //取得引发事件的对象
String miLab = mi.getLabel(); //取得菜单项的文字标题
if(miLab.equals("关于五子棋") )
{

}
else if(miLab.equals("帮助") )
{
JOptionPane.showMessageDialog(null, "木有帮助"); //打开不了网页
ProcessBuilder Tomlive = new ProcessBuilder("iexplore.exe",
"http://hi.csdn.net/space-5376767.html");
ProcessBuilder Gobang_skill = new ProcessBuilder("iexplore.exe",
"http://club.topsage.com/thread-799722-1-1.html");
}
else if(miLab.equals("开始游戏"))
{
}
else if(miLab.equals("重新开始"))
{
}
else if(miLab.equals("退出"))
{
System.exit(0);
}
else if(miLab.equals("简单"))
{
}
else if(miLab.equals("中等"))
{
}
else if(miLab.equals("困难"))
{
}
}
}
  • 打赏
  • 举报
回复
自己顶下
项目名称:[精仿]360安全卫士-10.30更新(CSkin Demo) 界面库版本号:10.30 最新版本 下载内容: 精仿360安全卫士源码一份, 可引用至工具箱最新版CSkin.dll一份 实现功能: 1.发光标题。 2.直角边框和阴影。 3.360安全卫士主界面模仿。 4.多系统支持,不需要win8系统,即可实现win8风格的360。 5.自定义控件的美化使用。 界面库更新文档: CC2013-10.30 1.由于SkinForm名字太多人使用,界面库命名正式改为CSkin.dll,官网www.cskin.net。 2.SkinTabControl标签中添加菜单箭头,可点击展开菜单。 3.SkinTabControl添加标签关闭按钮。 4.修复部分中文乱码问题。 5.优化好友列表右键菜单。 6.将窗体自定义系统按钮改为集合模式,可添加无数个自定义系统按钮。自定义系统按钮事件中可以 e.参数 来判断。 7.增加360安全卫士-DEMO案例。 8.增加SkinAnimatorImg控件,用于支持位图动画的播放。如360的动态logo。 9.各种细节BUG优化。 CC2013-10.11 1.添加SkinTabControlEx,加入更加自定义的美化属性和动画效果。 2.添加SkinAnimator,通用动画控件。 3.添加Html编辑器控件 4.修复SkinButton图标和文本相对位置的BUG CC2013-9.26 1.优化好友列表CPU占用 2.好友列表加入好友登录平台属性:安卓 苹果 WEBQQ PC 3.优化标题绘制模式,新添标题绘制模式属性。 4.新添标题偏移度属性。 5.加入圆形进度条控件:ProgressIndicator。 CC2013-9.5.2 1.优化截图控件,截图工具栏加入新功能。 2.解决个人信息卡和天气窗体显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决窗体点击事件不能触发的问题。 3.优化SkinButton继承父容器背景色的代码。 4.解决SkinButton异常错误。 CC2013-9.3 1.好友列表右键菜单反应问题。 2.新增美化控件SkinDatagridview。 3.密码软件盘回删不了文字问题。 4.双击窗体最大化,最大化后再双击恢复原大小,(win7)。 5.部分细节调优。 小编:下载不要分,DEMO教你如何熟练使用CSkin界面库美化自己的窗体。 友情链接: http://bbs.csdn.net/topics/390510544 (精仿QQ2013局域通讯) http://download.csdn.net/detail/lyx_520/5710799 (C#实现Win8窗体)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧