亲宝软件园·资讯

展开

Java复选框菜单

我是小木鱼 人气:0

说明:

        上面是我用Java做的扫雷游戏,其中就用到了带复选框式的菜单,原来也是用JCheckBoxMenuItem做的,但发现实在是问题多多,后干脆就用普通的JMenuItem来做,效果也不错。实际上说穿了很简单,就是在菜单的文本上做文章,前面加上一个 √ 即可。通过比较文本内容来判断是显示选中还是未选中,前面加还是不加 √ ,同时其他的文本内容如何变化,就好像扫雷的难度,初级、中级、高级只能选中一个。

代码:

package com.game.mine;
 
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JCheckBoxMenuItem;
 
/**
 * 功能:游戏窗口<br>
 * 作者:我是小木鱼(Lag)<br>
 */
public class GameFrame extends JFrame implements ActionListener
{
	private static final long serialVersionUID = 2596945399892762751L;
 
	/** 游戏面板 */
	private GamePanel gamePanel;
	
	/** 菜单控件 */
    JMenuItem jmi_easy,jmi_normal,jmi_hard;
        
	/**
	 * 功能:构造函数<br>
	 */
	public GameFrame()
	{
		try
		{
			//窗口
			this.setTitle("扫雷");
			this.setLayout(null);
			this.setResizable(false);
			this.setLocationRelativeTo(null);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			//菜单
			JMenuBar jmb_minesweeper = new JMenuBar();
			JMenu jm_game = new JMenu("游戏");
			jm_game.setFont(new Font("微软雅黑",Font.PLAIN,12));
			JMenuItem jmi_new = jm_game.add("  开局");
			jmi_new.setFont(new Font("微软雅黑",Font.PLAIN,12));
			jmi_new.addActionListener(this);
			jmi_new.setActionCommand("new");
			jm_game.addSeparator();
            this.jmi_easy = jm_game.add("√ 初级");
			this.jmi_easy.setFont(new Font("微软雅黑",Font.PLAIN,12));
			this.jmi_easy.addActionListener(this);
			this.jmi_easy.setActionCommand("easy");
            this.jmi_normal = jm_game.add("  中级");
			this.jmi_normal.setFont(new Font("微软雅黑",Font.PLAIN,12));
			this.jmi_normal.addActionListener(this);
			this.jmi_normal.setActionCommand("normal");
            this.jmi_hard = jm_game.add("  高级");
			this.jmi_hard.setFont(new Font("微软雅黑",Font.PLAIN,12));
			this.jmi_hard.addActionListener(this);
			this.jmi_hard.setActionCommand("hard");
			jm_game.addSeparator();
			JMenuItem jmi_exit = jm_game.add("  退出");
			jmi_exit.setFont(new Font("微软雅黑",Font.PLAIN,12));
			jmi_exit.addActionListener(this);
			jmi_exit.setActionCommand("exit");
			jmb_minesweeper.add(jm_game);
			JMenu jm_help = new JMenu("帮助");
			jm_help.setFont(new Font("微软雅黑",Font.PLAIN,12));
			JMenuItem jmi_about = jm_help.add("关于");
			jmi_about.setFont(new Font("微软雅黑",Font.PLAIN,12));
			jmi_about.addActionListener(this);
			jmi_about.setActionCommand("about");
			jmb_minesweeper.add(jm_help);
			this.setJMenuBar(jmb_minesweeper);
			//面板
			this.gamePanel = new GamePanel();
			this.add(this.gamePanel);
			//显示
			this.gamePanel.setLevel(this.gamePanel.EASY);
			this.setSize(this.gamePanel.getWidth() + 6,this.gamePanel.getHeight() + 50);
			this.setVisible(true);
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(this,"程序出现异常错误,即将退出!\r\n\r\n"+e.toString(),"提示",JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
	}
	
	/**
	 * 功能:事件监听<br>
	 */
	@Override
	public void actionPerformed(ActionEvent e)
	{
		String command = e.getActionCommand();
		if("new".equals(command))
		{
			this.gamePanel.newGame();
		}
		else if("easy".equals(command))
		{
             this.jmi_easy.setText("√ 初级");
             this.jmi_normal.setText("  中级");
             this.jmi_hard.setText("  高级");
             this.gamePanel.setLevel(this.gamePanel.EASY);
             this.setSize(this.gamePanel.getWidth() + 6,this.gamePanel.getHeight() + 50);
		}
		else if("normal".equals(command))
		{
              this.jmi_easy.setText("  初级");
              this.jmi_normal.setText("√ 中级");
              this.jmi_hard.setText("  高级");
              this.gamePanel.setLevel(this.gamePanel.NORMAL);
              this.setSize(this.gamePanel.getWidth() + 6,this.gamePanel.getHeight() + 50);
		}
		else if("hard".equals(command))
		{
               this.jmi_easy.setText("  初级");
               this.jmi_normal.setText("  中级");
               this.jmi_hard.setText("√ 高级");
               this.gamePanel.setLevel(this.gamePanel.HARD);
               this.setSize(this.gamePanel.getWidth() + 6,this.gamePanel.getHeight() + 50);
		}
		else if("exit".equals(command))
		{
			System.exit(0);
		}
		else if("about".equals(command))
		{
			JOptionPane.showMessageDialog(this,"我是小木鱼(Lag)","提示",JOptionPane.INFORMATION_MESSAGE);
		}
	}
 
}

        上面是扫雷的部分代码,游戏不是重点,重点看建立菜单和点击的代码。有时候解决问题的办法有很多,换个思路就好!

加载全部内容

相关教程
猜你喜欢
用户评论