📄 menuframe.java
字号:
package com.lovo.pig.view;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import com.lovo.pig.util.Images;
import com.lovo.pig.util.Musics;
public class MenuFrame extends JFrame implements Runnable{
private static final long serialVersionUID = -4600621043345458437L;
//图片工具类实例
private Images images;
//音乐播放类实例
private Musics musics;
//后台图像
private Image imgOffScreen;
//后台图像画笔
private Graphics drawOffScreen;
//菜单项数组
Image[] menu;
//鼠标是否进入图像按钮区域
private boolean overStart = false;
private boolean overOptions = false;
private boolean overHelp= false;
private boolean overExit= false;
//鼠标是否还停留在按钮区域内(自上次移入后还没移出去过)
boolean stayStart = false;
boolean stayOptions = false;
boolean stayHelp = false;
boolean stayExit = false;
public MenuFrame(){
setSize(800,627);
setResizable(false);
setLocationRelativeTo(null);
setTitle("Brave Pig");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
images = Images.getImages();
menu = images.getImgMenu();
musics = Musics.getMusic();
this.setVisible(true);
//创建后台图片
imgOffScreen = this.createImage(800, 627);
drawOffScreen = imgOffScreen.getGraphics();
//监视鼠标移动
this.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
checkMouseOver (e);
}
});
//监视鼠标点击
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
checkMouseClick(e);
}
});
new Thread(this).start();
}
public void paint(Graphics g){
if(drawOffScreen != null){
//绘制背景
drawOffScreen.drawImage(images.getImgMenuStage(), 0, 27, null);
//绘制菜单项
drawMenuItem(drawOffScreen,0,overStart);
drawMenuItem(drawOffScreen,1,overOptions);
drawMenuItem(drawOffScreen,2,overHelp);
drawMenuItem(drawOffScreen,3,overExit);
//前台绘制
g.drawImage(imgOffScreen , 0, 0, null);
}
}
@Override
public void run() {
while(true){
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//绘制单个菜单项
private void drawMenuItem(Graphics g,int index,boolean mouseOver){
int posY = index;//用来计算图片相对位置
if(!mouseOver){//鼠标经过,绘制偶数下标图像
index *= 2;
}else{//鼠标移走,绘制奇数下标图像
index = index*2 + 1;
}
g.drawImage(menu[index], 50, posY * 105 + 200,null);
}
/**
* 检查鼠标是否经过按钮
* @param x
* @param y
* @param img
*/
private void checkMouseOver (MouseEvent e){
int index;
//鼠标不再任何一个按钮区域内
boolean out = true;
for(index = 0;index<4;index++){
Rectangle rect = new Rectangle(50,index*105 + 200,200,100);
if(rect.contains(e.getPoint())){//如果鼠标所在点被按钮图像所包含
out = false;
if(index== 0){//start按钮
if(!stayStart){
musics.playOverMenu();
}
overStart = true;
overOptions = false;
overHelp = false;
overExit = false;
stayStart = true;
stayOptions = false;
stayHelp = false;
stayExit = false;
}else if(index == 1){//Options按钮
if(!stayOptions){
musics.playOverMenu();
}
overOptions = true;
overStart = false;
overHelp = false;
overExit = false;
stayStart = false;
stayOptions = true;
stayHelp = false;
stayExit = false;
}else if(index == 2){//Help按钮
if(!stayHelp){
musics.playOverMenu();
}
overHelp = true;
overStart = false;
overOptions = false;
overExit = false;
stayStart = false;
stayOptions = false;
stayHelp = true;
stayExit = false;
}else if(index == 3){//Exit按钮
if(!stayExit){
musics.playOverMenu();
}
overExit = true;
overHelp = false;
overStart = false;
overOptions = false;
stayStart = false;
stayOptions = false;
stayHelp = false;
stayExit = true;
}
}
}
if(out){//鼠标不再任何一个按钮区域内时
overExit = false;
overHelp = false;
overStart = false;
overOptions = false;
stayStart = false;
stayOptions = false;
stayHelp = false;
stayExit = false;
}
}
/**
* 检查鼠标点击按钮
* @param e
*/
private void checkMouseClick(MouseEvent e){
int index = 0;
for(index = 0;index<4;index++){
Rectangle rect = new Rectangle(50,index*105 + 200,200,100);
if(rect.contains(e.getPoint())){//如果鼠标所在点被按钮图像所包含
this.dispose();
if(index == 0){
new MainFrame();//游戏主界面
}else if(index == 1){
new OptionFrame();
}else if(index == 2){
new HelpFrame();
}else if(index == 3){
System.exit(0);
}
}
}
}
public static void main(String [] args){
new MenuFrame();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -