📄 hanomouseeventf.java
字号:
package hannota;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class HanoMouseEventf extends MouseAdapter {
private HanoPanel hPanel;
JLabel selectJLable;
JPanel selectedPanel;
int selectedColumns;
public HanoMouseEventf(HanoPanel hPanel) {
this.hPanel = hPanel;
}
// 选取盘子
private void selectDish(int num) {
for (int i = 1; i < 10; i++) {
// 判断面板之中是否有主键
if (hPanel.hanoPanel[num + i].getComponentCount() == 1) {
// 找到面板
selectedPanel = hPanel.hanoPanel[num + i];
// 用于获取面板之中主键Label
selectJLable = (JLabel) selectedPanel.getComponent(0);
// 设置盘子的颜色
selectJLable.setBackground(Color.yellow);
selectJLable.updateUI();
selectedPanel.updateUI();
break;
}
}
selectedColumns = num;
}
// 放盘子
private void putDish(int num) {
// 自己放在自己之中正确
JLabel jlb = new JLabel();
if (selectedColumns == num) {
selectJLable.setBackground(Color.blue);
selectJLable = null;
return;
}
for (int i = 9; i > 0; i--) {
// 判断面板之中是否有主键
if (hPanel.hanoPanel[num + i].getComponentCount() == 0) {
// 有盘子执行
if (i != 9) {
// 获取同一例之中最上面主键的下一个主键,并取出盘子
jlb = (JLabel) hPanel.hanoPanel[num + i + 1]
.getComponent(0);
if (jlb.getWidth() < selectJLable.getWidth()) {
JOptionPane.showMessageDialog(hPanel, "不能移到这里!");
return;
}
}
hPanel.hanoPanel[num + i].add(selectJLable);
// 用于计算步数
hPanel.bushu++;
// 计算步数的 标签
// hPanel.bushulabel = new JLabel();
//
hPanel.prompt.setText("您走了" + hPanel.bushu + "步了");
//鼓励语句,好让别人继续玩你的游戏
if (hPanel.bushu > 20) {
hPanel.prompt.setText("您走了" + hPanel.bushu + "步了"
+ "努力哦!不要放弃!");
}
if (hPanel.bushu > 50) {
hPanel.prompt
.setText("您走了" + hPanel.bushu + "步了" + "好厉害哦!");
}
if (hPanel.bushu == 100) {
JOptionPane.showMessageDialog(hPanel, "你太厉害了");
}
selectJLable.setBackground(Color.blue);
// 从新绘制标签
selectJLable.updateUI();
// 从新绘制面板
hPanel.hanoPanel[num + i].updateUI();
hPanel.centerPanel.updateUI();
// 盘子放好了,就需要跳出循环
break;
}
}
// 释放盘子
selectJLable = null;
}
// 完成游戏
private void complete(int N) {
if (hPanel.hanoPanel[30 - N].getComponentCount() == 1) {
// 显示完成信息
hPanel.prompt.setText("完成!游戏结束!");
JOptionPane.showMessageDialog(hPanel, "恭喜你闯过第" + "" + hPanel.level
+ "" + "关!");
// 每一次点击一次选择盘子你走的不数就会增加一步,个人觉得没有意思
JOptionPane.showMessageDialog(hPanel, "你闯过第" + "" + hPanel.level
+ "" + "关!" + "您一共花了" + hPanel.bushu + "步");
hPanel.bushu = 0;
JOptionPane.showMessageDialog(hPanel, "继续下一关吗?");
// 把按钮从新放置一次
hPanel.level++;
hPanel.hanoactionevent.reset();
}
}
// 鼠标的点基事件
public void mousePressed(MouseEvent e) {
// 判断是否有主键
if (e.getSource().equals(hPanel.hanoPanel[0])) {
if (selectJLable == null) {
// 盘子不存在,我们就选盘子
selectDish(0);
} else {
// 盘子存在了我们就放盘子
putDish(0);
}
}
if (e.getSource().equals(hPanel.hanoPanel[10])) {
if (selectJLable == null) {
// 选盘子
selectDish(10);
} else {
putDish(10);
}
}
if (e.getSource().equals(hPanel.hanoPanel[20])) {
if (selectJLable == null) {
// 盘子不存在,我们就选盘子
selectDish(20);
} else {
// 盘子存在了就进行放盘子,
putDish(20);
complete(hPanel.level);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -