//将组件”南“增加到南边区域 add(south,BorderLayout.SOUTH);
//将组件“hintMessage文本框”增加到北边区域 add(hintMessage,BorderLayout.NORTH); //每隔1000毫秒监视器给计时器计时一次 timer=new javax.swing.Timer(1000,this); //新建”保存成绩“对话框对象,默认对话框不可见 record=new Record(); }
//传递参数给row row=m;
//传递参数给col col=n;
//传递参数给gradeFile gradeFile=f; //去掉容器中的组件 center.removeAll(); //传递参数给imageFileName imageFileName=name; //定义图标
ImageIcon icon[]=new ImageIcon[imageFileName.length]; //载入图片
for(int i=0;i icon[i]=new ImageIcon(imageFileName[i]); } public void initBlock(int m,int n,String name[],File f){ if(allBlockList.isEmpty()){//判断数组表allBlockList的每个单元 for(int i=0;i //清空数组表allBlockList //给数组表allBlockList的每个单元中增加一个Block对象 allBlockList.add(new Block()); } 是否有一个Block对象 else{ 26 局 allBlockList.clear(); //重新给数组表allBlockList的每个单元中增加一个Block对象 for(int i=0;i //让数组表allBlockList的每个单元注册监视器 allBlockList.get(i).addActionListener(this); //获得每个单元上面的图标 allBlockList.get(i).setOpenStateIcon(icon[i%row]); } allBlockList.add(new Block()); } for(int i=0;i Collections.shuffle(allBlockList);//随机排列数组表//将组件“center”设置为行为“row”,列为“col”的GridLayout布center.setLayout(new GridLayout(row,col)); for(int i=0;i //将数组表allBlockList中的每个单元添加到“center”组件中 center.add(allBlockList.get(i)); } allBlockList的每个单元 //将组件“center”添加到BorderLayout的中心区域 add(center,BorderLayout.CENTER); if(timer.isRunning()){//如果计时器在运行 timer.stop();//让计时器停止 } //在组件“hintMessage文本框”添加文本\您需要用鼠标单击出+col+hintMessage.setText(\您需要用鼠标单击出\个同样图标的方块//用户用时初始化为0 usedTime=0; //显示用户同时(usedTime的值)初始化为空 showUsedTime.setText(null); //添加组件“center”后,让容器调用validate()方法,保证容器中的 个同样图标的方块\\ 27 组件能正常显示 象 ImageIcon openStateIcon=block.getOpenStateIcon();//从Blockblock.setIcon(openStateIcon);//设定block的当前图标为上面取 if(openIconList.size()==0) {//如果打开图标列表为空 openIconList.add(openStateIcon);//将刚才的图标加入打开openBlockList.add(block);//将激发事件的对象追加到打开的success=1;//用户找到的具有同样的图标的方块的个数置1 } 对象block中取出打开的状态图标 出来的状态图标 validate(); } //当用户单击MemoryGame主类窗口的cartImageIcon和animalImageIcon//将MemoryGame中存放图像文件名字的imageName数组的引用传递给public void setImageName(String name[]){ imageFileName=name; } //如果事件源是Block类的实例 if(e.getSource() instanceof Block){//如果事件源是Block类的按钮 if(!timer.isRunning())//如果计时器没工作 timer.start();//启动计时器 Block block=(Block)e.getSource();//从事件e中取出源block对 菜单项时 imageFileName public void actionPerformed(ActionEvent e){ 图标列表 块列表 else{//如果打开图标列表为不为空 ImageIcon temp=openIconList.getLast();//用户当前打开的 图片图标 28 //判断用户当前打开的图片图标和已经打开的图标是否相同 if(temp==openStateIcon&&!(openBlockList.contains(block))){ } //用户当前打开的图片图标和已经打开的图标不相同 else //用户找到的具有同样的图标的方块的个数加1 success=success+1; //将打开状态下的图标添加到打开图标列表 openIconList.add(openStateIcon); openBlockList.add(block); //判断用户找到的具有同样的图标的方块的个数是否等于if(success==col){//测试结束 for(int i=0;i //让数组表allBlockList的每个单元的Block对象allBlockList.get(i).setEnabled(false); } Block b=openBlockList.get(j); //让openBlockList的每个单元的Block对象变灰b.setDisabledIcon(b.getOpenStateIcon()); } 列数 变灰(不可点击) for(int j=0;j (不可点击) //让计时器停止 timer.stop(); //将用户用时传递给Record对话框 record.setTime(usedTime); //将级别文件gradeFile传递给Record对话框 record.setGradeFile(gradeFile); //让Record对话框可见 record.setVisible(true); } 29 if((temp!=openStateIcon)&&(!(openBlockList.contains(block)))){ } } //清空链表openIconList用来存放用户找到的图标相同的openIconList.clear(); //清空链表openBlockList用来存放用户找到的图标相同的openBlockList.clear(); //将用户点击的图标添加到链表openIconList openIconList.add(openStateIcon); //将用户点击的图标添加到链表openBlockList openBlockList.add(block); //用户找到的具有同样的图标的方块的个数置1 success=1; //遍历所有测试区图标 for(int i=0;i //判断测试区的每一个图标是否没有 if(allBlockList.get(i)!=block) //设置图标为空 allBlockList.get(i).setIcon(null); 方块上的图标 方块 } } //如果事件源是按钮hintButton(“提示”) if(e.getSource()==hintButton){ //判断线程hintThead没运行 if(!hintThead.isAlive()) //创建线程hintThead hintThead=new Thread(this); //遍历所有测试区图标 for(int i=0;i //将测试区的每一个图标移除监视器 allBlockList.get(i).removeActionListener(this); //用户用时加10 30