事件驱动程序设计Word文件下载.docx
- 文档编号:19097921
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:11
- 大小:58.18KB
事件驱动程序设计Word文件下载.docx
《事件驱动程序设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《事件驱动程序设计Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
应外部的事件与分发事件。
通常尚未被事件处理器处理的事件,都会被系统放在一个称为事
件队列的数据结构中,等待被处理。
许多情况下,事件处理器可以自己触发事件,因此也可能形成一个事件串。
事件驱
动程序设计的着重于弹性以及异步化上面,并且企图尽可能的modeless。
图形用户界面这
类程序就是典型的事件驱动设计方式。
计算机操作系统是事件驱动程序的典型示例。
在操作系统的最底层,中断处理器的动
作就像是硬件事件的直接处理器,搭配着CPU运行分配事件规则动作。
对软件进程而言,
基本上操作系统可视为一个事件分配器,发送数据和软件中断给用户自己写的软件进程。
packagetext;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassFrame
extendsJFrame{
JTextFieldtext;
JLabelnowBomb,setBomb;
intBombNum,BlockNum;
//当前雷数,当前方块数
intrightBomb,restBomb,restBlock;
//找到的地雷数,剩余雷数,剩余方块数
JButtonstart=newJButton(”开始”);
JPanelMenuPamel=newJPanel();
JPanelbombPanel=newJPanel();
Bomb叩bombButton;
JPanelc;
newBorderLayout()newGridLayout();
EXIT_ON_CLOSE);
BorderLayoutborderLayout1=
GridLayoutgridLayout1=publicFrame(){try{setDefaultCloseOperation(jbInit();
}
catch(Exceptionexception){exception.printStackTrace();
privatevoidjbInit()throwsException{
c=(JPanel)getContentPane();
setTitle("
扫雷"
);
c.setBackground(Color.WHITE);
MenuPamel.setBackground(Color.GRAY);
c.setLayout(borderLayout1);
setSize(newDimension(600,600));
setResizable(false);
BlockNum=144;
BombNum=10;
text=newJTextField("
10"
3);
this));
nowBomb=newJLabel("
setBomb=newJLabel("
start.addActionListener(当前雷数"
+"
:
"
+BombNum);
设置地雷数"
newFrame1_start_actionAdapter(
MenuPamel.add(setBomb);
MenuPamel.add(text);
MenuPamel.add(start);
MenuPamel.add(nowBomb);
SOUTH);
c.add(MenuPamel,java.awt.BorderLayout.
bombPanel.setLayout(gridLayout1);
gridLayout1.setColumns((int)Math.sqrt(BlockNum));
gridLayout1.setRows((int)Math.sqrt(BlockNum));
bombButton=newBomb[(int)Math.sqrt(BlockNum)][(int)
Math.sqrt(BlockNum)];
for(inti=0;
i<
(
for(intj=0;
j<
int)Math.sqrt(BlockNum);
i++){
j++){
bombButton[i][j]=newBomb(i,j);
//bombButton[i][j].setSize(10,10);
bombButton[i][j].setFont(
bombButton[i][j].setForeground(Color.bombButton[i][j].addMouseListener(bombButton[i][j].addActionListener(bombPanel.add(bombButton[i][j]);
c.add(bombPanel,java.awt.BorderLayout.
startBomb();
/*开始按钮*/
white);
newBomb_mouseAdapter(this));
newBomb_actionAdapter(this));
CENTER);
publicvoidstart_actionPerformed(ActionEvente){intnum=Integer.parseInt(text.getText().trim());
if(num>
=5&
&
num<
50){
BombNum=num;
elseif(num<
5){
(null,"
您设置的地雷数太少了,请重设!
"
错误
ERROR_MESSAG)E;
JOptionPane.showMessageDialog
)
JOptionPane.
num=10;
else{
您设置的地雷数太多了,请重设!
/*开始,布雷*/
publicvoidstartBomb(){
nowBomb.setText("
当前雷数"
:
"
(int)Math.sqrt(BlockNum);
设置字体大小
bombButton[i][j].isBomb=bombButton[i][j].isClicked=bombButton[i][j].isRight=bombButton[i][j].BombFlag=0;
bombButton[i][j].BombRoundCount=9;
bombButton[i][j].setEnabled(bombButton[i][j].setText("
bombButton[i][j].setFont(bombButton[i][j].setForeground(Color.rightBomb=0;
restBomb=BombNum;
restBlock=BlockNum-BombNum;
BombNum;
){
int
if(bombButton[x][y].isBomb!
=bombButton[x][y].isBomb=i++;
CountRoundBomb();
/*计算方块周围雷数*/
false;
true);
newFont("
Font.PLAIN,14));
//
BLUE);
int)(Math.sqrt(BlockNum)int)(Math.sqrt(BlockNum)
true){
true;
publicvoidCountRoundBomb(){
intcount=0;
//当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数if(bombButton[i][j].isBomb!
=true){
for(intx=i-1;
x<
i+2;
x++){
for(inty=j-1;
y<
j+2;
y++){
if((x>
=0)&
(y>
=0)
(x<
((int)Math.sqrt(BlockNum)))
(y<
((int)Math.sqrt(BlockNum)))){
if(bombButton[x][y].isBomb==true){
count++;
}bombButton[i][j].BombRoundCount=count;
/*是否挖完了所有的雷*/
publicvoidisWin(){restBlock=BlockNum-BombNum;
if(bombButton[i][j].isClicked==true){restBlock--;
if(rightBomb==BombNum||restBlock==0){
胜利
JOptionPane.showMessageDialog(this,"
您挖完了所有的雷,您胜利了!
>
JOptionPane.INFORMATION_MESSAGE);
startBomb();
/**当选中的位置为空,则翻开周围的地图**/
publicvoidisNull(BombClickedButton){
inti,j;
i=ClickedButton.num_x;
j=ClickedButton.num_y;
if(((x!
=i)||(y!
=j))&
(x>
if(bombButton[x][y].isBomb==false
bombButton[x][y].isClicked==false
bombButton[x][y].isRight==false){turn(bombButton[x][y]);
/*翻开*/
publicvoidturn(BombClickedButton){
ClickedButton.setEnabled(false);
ClickedButton.isClicked=true;
if(ClickedButton.BombRoundCount>
0){
ClickedButton.setText(ClickedButton.BombRoundCount+"
}
isNull(ClickedButton);
/*左键点击*/
publicvoidactionPerformed(ActionEvente){
if(((Bomb)e.getSource()).isClicked==false
((Bomb)e.getSource()).isRight==false){
if(((Bomb)e.getSource()).isBomb==false){turn(((Bomb)e.getSource()));
isWin();
/*右键点击*/
publicvoidmouseClicked(MouseEvente){
BombbombSource=(Bomb)e.getSource();
booleanright=SwingUtilities.isRightMouseButton(e);
if((right==true)&
(bombSource.isClicked==false)){
bombSource.BombFlag=(bombSource.BombFlag+1)%3;
if(bombSource.BombFlag==1){
if(restBomb>
0){bombSource.setForeground(Color.RED);
bombSource.setText("
F"
bombSource.isRight=true;
restBomb--;
else{bombSource.BombFlag=0;
elseif(bombSource.BombFlag==2){restBomb++;
bombSource.setText("
Q"
bombSource.isRight=false;
else{bombSource.setText("
if(bombSource.isBomb==true){
if(bombSource.BombFlag==1){rightBomb++;
elseif(bombSource.BombFlag==2){rightBomb--;
+restBomb);
isWin();
publicstaticvoidmain(String[]args){
Frameframe=newFrame();
frame.setVisible(true);
classFrame1_start_actionAdapter
implementsActionListener{
privateFrameadaptee;
Frame1_start_actionAdapter(Frameadaptee){this.adaptee=adaptee;
publicvoidactionPerformed(ActionEvente){adaptee.start_actionPerformed(e);
classBomb
extendsJButton{
intnum_x,num_y;
intBombRoundCount;
booleanisBomb;
booleanisClicked;
intBombFlag;
booleanisRight;
publicBomb(intx,inty){num_x=x;
num_y=y;
BombFlag=0;
BombRoundCount=9;
isBomb=false;
isClicked=false;
isRight=false;
classBomb_actionAdapterimplementsActionListener{privateFrameadaptee;
Bomb_actionAdapter(Frameadaptee){this.adaptee=adaptee;
publicvoidactionPerformed(ActionEvente){adaptee.actionPerformed(e);
classBomb_mouseAdapter
extendsMouseAdapter{
Bomb_mouseAdapter(Frameadaptee){this.adaptee=adaptee;
publicvoidmouseClicked(MouseEvente){adaptee.mouseClicked(e);
•4lHli*(IM))・I』砒)闪"
代-1>
H
Jj«
ty-(W)g.ran^W:
i■■limtjr^rth.rqri-i:
BlcciciLn>
-l)|i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 事件 驱动程序 设计