package com.pcy;
import java.awt.*;
import javax.swing.*;
public class HanoPanel extends JPanel {
@SuppressWarnings("unused")
private CardLayout cardLayout;
@SuppressWarnings("unused")
private JPanel fatherJPanel;
JPanel centerPanel;
JPanel northPanel;
JPanel southPanel;
HanoActionEvent hme;
int level = 3;
int N=45;
JButton exit;
JButton reset;
JButton config;
JLabel prompt;
JLabel[] dish = new JLabel[N/3-1];
JPanel[] hanoPane = new JPanel[N];
Grame_Size sd;
HanoMouseEvent html;
CountTime time;
JLabel timeJLabel;
public HanoPanel(JPanel fatherJPanel, CardLayout cardLayout) {
this.fatherJPanel = fatherJPanel;
this.cardLayout = cardLayout;
createInterPanel();
}
// 构建游戏界面,使用边界布局管理器
public void createInterPanel() {
southPanel = new JPanel();
northPanel = new JPanel();
centerPanel = new JPanel();
exit = new JButton("退出");
reset = new JButton("重设");
config = new JButton("设置等级");
prompt = new JLabel("开始游戏!! ");
timeJLabel = new JLabel("您所用的时间 0:0:0");
sd = new Grame_Size();
hme = new HanoActionEvent(this, fatherJPanel, cardLayout);
time = new CountTime(this);
createNorthPanel();
createHanoPane();
createDishes();
createCenterPanel();
createSouthPanel();
addToContainer(); // 添加北,中,南面板到边界布局的容器面板中
}
@SuppressWarnings("unused")
// 创建北边面板:状态栏面板
private void createNorthPanel() {
northPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
northPanel.setBackground(Color.white);
prompt.setSize(sd.Get_width(), 30);
prompt.setPreferredSize(new Dimension(300, 30));
timeJLabel.setPreferredSize(new Dimension(200, 30));
northPanel.add(prompt);
northPanel.add(timeJLabel);
}
@SuppressWarnings("unused")
// 创建中间面板:塔柱面板
private void createCenterPanel() {
addDishes(level);
addHanoPane();
addMouseE();
int index = 0;
for (int i = 0; i < N; i++) {
if (i % (N/3) == 0) {
index = i;
hanoPane[i].setLayout(new GridLayout(N/3-1, 1, 0, 0));
hanoPane[i].setBorder(BorderFactory
.createLineBorder(Color.blue));
} else {
hanoPane[i].setPreferredSize(new Dimension(150, 20));
hanoPane[index].add(hanoPane[i]);
}
}
}
@SuppressWarnings("unused")
// 创建南边面板:按钮面板
public void createSouthPanel() {
southPanel.setLayout(new GridLayout(0, 3, 5, 5));
reset.addActionListener(hme);
exit.addActionListener(hme);
config.addActionListener(hme);
southPanel.add(reset);
southPanel.add(config);
southPanel.add(exit);
}
@SuppressWarnings("unused")
// 创建中间面板包含的30个面板
private void createHanoPane() {
for (int i = 0; i < N; i++) {
hanoPane[i] = new JPanel();
hanoPane[i].setBorder(BorderFactory.createLineBorder(Color.green));
}
}
@SuppressWarnings("unused")
// 添加面板到中间面板中
private void addHanoPane() {
// centerPanel.setLayout(new GridLayout(0, 3, 5, 2));
centerPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 10));
for (int i = 0; i < N; i++) {
if (i %( N/3) == 0) {
centerPanel.add(hanoPane[i]);
}
}
}
@SuppressWarnings("unused")
// 添加北,中,南面板到边界布局的容器面板中
private void addToContainer() {
this.setLayout(new BorderLayout());
this.add(northPanel, BorderLayout.NORTH);
this.add(southPanel, BorderLayout.SOUTH);
this.add(centerPanel, BorderLayout.CENTER);
}
@SuppressWarnings("unused")
// 创建N/3-1个盘子
private void createDishes() {
for (int i = 0; i < N/3-1; i++) {
dish[i] = new JLabel();
dish[i].setSize(i * 10 + 10, 10);
dish[i].setPreferredSize(new Dimension(i * 10 + 10, 10));
dish[i].setBackground(Color.blue);
dish[i].setOpaque(true);
}
}
@SuppressWarnings("unused")
// 添加盘子到塔柱面板中,n代表塔的序号
public void addDishes(int n) {
int count = n - 1;
for (int i = N/3-1; i > N/3-1 - n; i--) {
hanoPane[i].add(dish[count]);
count--;
}
}
// 从中间面板添加鼠标事件监听器
protected void addMouseE() {
html = new HanoMouseEvent(this);
hanoPane[0].addMouseListener(html);
hanoPane[N/3].addMouseListener(html);
hanoPane[N/3*2].addMouseListener(html);
}
// 从中间面板移走鼠标事件监听器
protected void removeMouseE() {
hanoPane[0].addMouseListener(html);
hanoPane[N/3].addMouseListener(html);
hanoPane[N/3*2].addMouseListener(html);
}
@SuppressWarnings("deprecation")
public void rest() {
int count = 0;
count = level - 1;
if (html.selectedJlabel != null) {
html.selectedJlabel = null;
}
for (int i = 0; i <N ; i++) {
if (i % (N/3)!= 0) {
hanoPane[i].removeAll();
hanoPane[i].updateUI();
}
}
for (int j = N/3-1; j > N/3-1 - level; j--) {
hanoPane[j].add(dish[count]);
dish[count].setBackground(Color.black);
dish[count].setOpaque(true);
count--;
}
html.mark = 0;
prompt.setText("移动步数 " + String.valueOf(html.mark));
prompt.updateUI();
if (time.isAlive()) {
try {
time.number = 0;
time.stop();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
time = null;
time = new CountTime(this);
timeJLabel.setText("您所用的时间 0:0:0");
timeJLabel.updateUI();
}
}
hannuota JAVA
需积分: 0 37 浏览量
更新于2008-11-04
收藏 346KB RAR 举报
**Java编程语言基础**
在Java编程领域,"hannuota JAVA"可能指的是一个学习资源或教程,旨在帮助初学者理解和掌握Java编程的基础知识。Java是一种广泛应用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年推出。它的设计目标是“简单、通用、面向对象、健壮、安全”,使得它成为开发各种类型应用程序的理想选择,从桌面应用到企业级应用,再到移动应用和嵌入式系统。
**面向对象编程**
Java的核心特性之一就是面向对象编程(Object-Oriented Programming, OOP)。在Java中,一切皆为对象,对象是类的实例,而类是对象的蓝图。类定义了对象的属性(数据成员)和行为(方法)。封装、继承和多态是OOP的三大核心概念:
1. **封装**:隐藏对象的内部实现细节,只对外提供公共接口进行操作,增强了代码的安全性和可维护性。
2. **继承**:一个类可以继承另一个类的属性和方法,实现代码重用,减少了冗余,增强了灵活性。
3. **多态**:同一消息可以被不同类型的对象响应,提供了灵活性和扩展性。
**基本语法**
Java的语法与C++类似,但更简洁。主要包括变量声明、控制流语句(如if、for、while)、方法定义等。Java中的数据类型包括基本类型(如int、float、boolean)和引用类型(如类、接口、数组)。变量必须先声明后使用,每条语句以分号结尾。
**异常处理**
Java引入了异常处理机制,通过try-catch-finally语句块来捕获和处理程序运行时可能出现的错误。这有助于保持程序的稳定性和健壮性。
**集合框架**
Java集合框架是处理对象集合的一系列接口和类,如ArrayList、LinkedList、HashSet、HashMap等。它们提供了添加、删除、查找和遍历元素的方法,极大地简化了数据的组织和管理。
**垃圾回收**
Java有一个自动垃圾回收机制,负责回收不再使用的内存空间,避免了程序员手动管理内存,降低了出现内存泄漏的风险。
**多线程**
Java内置对多线程的支持,允许程序同时执行多个任务。通过实现Runnable接口或者继承Thread类,可以创建并启动线程。
**JVM和类加载器**
Java虚拟机(JVM)是Java程序的运行环境,负责解析字节码并执行。类加载器负责将类加载到JVM中,包括Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader。
**标准库**
Java标准库(Java API)提供了大量预先编写好的类和接口,覆盖了网络、I/O、日期/时间、数学运算等多个领域,极大地提高了开发效率。
**Java SE, Java EE, 和 Java ME**
Java有三个主要版本:Java Standard Edition (SE) 用于桌面应用,Java Enterprise Edition (EE) 用于企业级应用,Java Micro Edition (ME) 用于移动和嵌入式设备。
以上只是Java编程的基础知识概述,实际学习过程中,还需要深入理解类库的使用,以及设计模式、并发编程、数据库连接、Web开发等相关技术。"第四组"可能指的是这个学习资源中的一个部分,具体内容需要查看压缩包内的文件才能详细阐述。
pcyyunyun123
- 粉丝: 2
- 资源: 4