📄 hanomouseevent.java
字号:
package com.Luoweixun;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class HanoMouseEvent extends MouseAdapter{
HanoPanel hPanel=null;
// 保存要移动的盘子
JLabel selectedJlabel=null;
// 保存移动盘子的塔柱面板
JPanel selectedPanel=null;
// 塔的序号
int selsctedColumns=0;
public HanoMouseEvent(HanoPanel hPanel){
this.hPanel=hPanel;
}
/**
* 鼠标按键处理,实现移动
*/
public void mousePressed(MouseEvent e){
Object s=e.getSource();
//判断事件源
if(s==hPanel.hanoPane[0]){
//没有盘子被选中
if(selectedJlabel==null){
selectDish(0);
}
else{
putDish(0);
hPanel.text.setText("步数:"+hPanel.sum);
}
}
else if(s==hPanel.hanoPane[10]){
//没有有盘子被选中
if(selectedJlabel==null){
selectDish(10);
}
else{
putDish(10);
hPanel.text.setText("步数:"+hPanel.sum);
}
}
else if(s==hPanel.hanoPane[20]){
//没有有盘子被选中
if(selectedJlabel==null){
selectDish(20);
}
else{
putDish(20);
hPanel.text.setText("步数:"+hPanel.sum);
}
}
complete(hPanel.Level);
}
// 在塔面板中选取一个盘子
public void selectDish(int num){
hPanel.sum++;
for(int i=1+num;i<=9+num;i++){
if(hPanel.hanoPane[i].getComponentCount()!=0){
selectedJlabel=(JLabel) hPanel.hanoPane[i].getComponent(0);
selectedJlabel.setBackground(Color.yellow);
selectedPanel=hPanel.hanoPane[i];
break;
}
}
}
// 将选取的盘子放置到参数num的塔柱体中
public void putDish(int num){
if(num==0){
for(int i=9+num;i>=1+num;i--){
// 如果数为空
if(hPanel.hanoPane[i].getComponentCount()==0){
selectedPanel.updateUI();
hPanel.hanoPane[i].add(selectedJlabel);
selectedJlabel.setBackground(Color.blue);
selectedPanel=hPanel.hanoPane[i];
selectedJlabel=null;
break;
}
// 如果数不为空
else if(hPanel.hanoPane[i].getComponentCount()!=0){
if(selectedJlabel.getWidth()>hPanel.hanoPane[i].getComponent(0).getWidth()){
JOptionPane.showMessageDialog(null, "不能这样移动");
selectedJlabel.setBackground(Color.blue);
selectedJlabel=null;
break;
}
else if(selectedJlabel.getWidth()==hPanel.hanoPane[i].getComponent(0).getWidth()){
selectedJlabel.setBackground(Color.blue);
selectedPanel.updateUI();
selectedJlabel=null;
break;
}
}
}
}
else if(num==10){
for(int i=9+num;i>=1+num;i--){
// 如果数为空
if(hPanel.hanoPane[i].getComponentCount()==0){
selectedPanel.updateUI();
hPanel.hanoPane[i].add(selectedJlabel);
selectedJlabel.setBackground(Color.blue);
selectedPanel=hPanel.hanoPane[i];
selectedJlabel=null;
break;
}
// 如果数不为空
else if(hPanel.hanoPane[i].getComponentCount()!=0){
if(selectedJlabel.getWidth()>hPanel.hanoPane[i].getComponent(0).getWidth()){
JOptionPane.showMessageDialog(null, "不能这样移动");
hPanel.hanoPane[i].updateUI();
selectedJlabel.setBackground(Color.blue);
selectedJlabel=null;
break;
}
else if(selectedJlabel.getWidth()==hPanel.hanoPane[i].getComponent(0).getWidth()){
selectedJlabel.setBackground(Color.blue);
selectedPanel.updateUI();
selectedJlabel=null;
break;
}
}
}
}
else if(num==20){
for(int i=9+num;i>=1+num;i--){
// 如果数为空
if(hPanel.hanoPane[i].getComponentCount()==0){
selectedPanel.updateUI();
hPanel.hanoPane[i].add(selectedJlabel);
selectedJlabel.setBackground(Color.blue);
selectedPanel=hPanel.hanoPane[i];
selectedJlabel=null;
break;
}
// 如果数不为空
else if(hPanel.hanoPane[i].getComponentCount()!=0){
if(selectedJlabel.getWidth()>hPanel.hanoPane[i].getComponent(0).getWidth()){
JOptionPane.showMessageDialog(null, "不能这样移动");
selectedJlabel.setBackground(Color.blue);
selectedJlabel=null;
break;
}
else if(selectedJlabel.getWidth()==hPanel.hanoPane[i].getComponent(0).getWidth()){
selectedJlabel.setBackground(Color.blue);
selectedPanel.updateUI();
selectedJlabel=null;
break;
}
}
}
}
}
// 判断游戏是否完成
private void complete(int N) {
int sum=0;
for(int i=21;i<30;i++){
sum=hPanel.hanoPane[i].getComponentCount()+sum;
}
if(sum==N){
JOptionPane.showMessageDialog(hPanel.centerPanel, "恭喜过关");
for(int i=0;i<30;i++){
if(i%10!=0){
hPanel.hanoPane[i].updateUI();
}
}
for(int i=0;i<9;i++){
hPanel.dish[i].setBackground(Color.blue);
}
hPanel.Level=++hPanel.Level;
hPanel.addDishes(hPanel.Level);
hPanel.sum=0;
hPanel.text.setText("步数: "+hPanel.sum);
hPanel.text1.setText("等级:"+hPanel.Level);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -