Java如何做帶復(fù)選框的菜單實(shí)例代碼

說(shuō)明:
????????上面是我用Java做的掃雷游戲,其中就用到了帶復(fù)選框式的菜單,原來(lái)也是用JCheckBoxMenuItem做的,但發(fā)現(xiàn)實(shí)在是問(wèn)題多多,后干脆就用普通的JMenuItem來(lái)做,效果也不錯(cuò)。實(shí)際上說(shuō)穿了很簡(jiǎn)單,就是在菜單的文本上做文章,前面加上一個(gè) √ 即可。通過(guò)比較文本內(nèi)容來(lái)判斷是顯示選中還是未選中,前面加還是不加 √ ,同時(shí)其他的文本內(nèi)容如何變化,就好像掃雷的難度,初級(jí)、中級(jí)、高級(jí)只能選中一個(gè)。
代碼:
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>
* 作者:我是小木魚(yú)(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;
/**
* 功能:構(gòu)造函數(shù)<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(" 開(kāi)局");
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("√ 初級(jí)");
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(" 中級(jí)");
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(" 高級(jí)");
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("關(guān)于");
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,"程序出現(xiàn)異常錯(cuò)誤,即將退出!\r\n\r\n"+e.toString(),"提示",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
/**
* 功能:事件監(jiān)聽(tīng)<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("√ 初級(jí)");
this.jmi_normal.setText(" 中級(jí)");
this.jmi_hard.setText(" 高級(jí)");
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(" 初級(jí)");
this.jmi_normal.setText("√ 中級(jí)");
this.jmi_hard.setText(" 高級(jí)");
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(" 初級(jí)");
this.jmi_normal.setText(" 中級(jí)");
this.jmi_hard.setText("√ 高級(jí)");
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,"我是小木魚(yú)(Lag)","提示",JOptionPane.INFORMATION_MESSAGE);
}
}
}
? ? ? ? 上面是掃雷的部分代碼,游戲不是重點(diǎn),重點(diǎn)看建立菜單和點(diǎn)擊的代碼。有時(shí)候解決問(wèn)題的辦法有很多,換個(gè)思路就好!
到此這篇關(guān)于Java如何做帶復(fù)選框的菜單實(shí)例代碼的文章就介紹到這了,更多相關(guān)Java復(fù)選框菜單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中對(duì)Redis的緩存進(jìn)行操作的示例代碼
本篇文章主要介紹了java中對(duì)Redis的緩存進(jìn)行操作的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
java編程中拷貝數(shù)組的方式及相關(guān)問(wèn)題分析
這篇文章主要介紹了java編程中拷貝數(shù)組的方式及相關(guān)問(wèn)題分析,分享了Java中數(shù)組復(fù)制的四種方式,其次對(duì)二維數(shù)組的簡(jiǎn)單使用有一段代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
SpringBoot解決@Component無(wú)法注入其他Bean的問(wèn)題
這篇文章主要介紹了SpringBoot解決@Component無(wú)法注入其他Bean的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Mybatis中3種關(guān)聯(lián)關(guān)系的實(shí)現(xiàn)方法示例
這篇文章主要給大家介紹了關(guān)于Mybatis中3種關(guān)聯(lián)關(guān)系的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Java?map和bean互轉(zhuǎn)常用的方法總結(jié)
這篇文章主要給大家介紹了關(guān)于Java中map和bean互轉(zhuǎn)常用方法的相關(guān)資料,平時(shí)日常Java開(kāi)發(fā),經(jīng)常會(huì)涉及到Java?Bean和Map之間的類型轉(zhuǎn)換,需要的朋友可以參考下2023-09-09

