package src.sort;
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
public class BallPanel extends JPanel implements Runnable
{
private Ball[] balls;//要排列的小球
private JLabel start;//开始按键
private int trackWidth;
private static JLabel LFunction;//选择排序方法说明
private static JLabel LSource;//选择排序样本说明
int theSort[]= {0,1,2,3,4,5,6,7,8,9}; //安排小球的位置
//数组中的值为小球号
int theSortShun[]= {0,1,2,3,4,5,6,7,8,9};//顺序
int theSortNi[]= {9,8,7,6,5,4,3,2,1,0};//逆序
int theSortSui[]= {7,9,1,5,2,4,6,3,0,8};//随机
int theSortParSui[]= {0,3,2,1,6,5,4,9,8,7};//部分顺序
int type;//记录用户所选的排序方法
int[] TR2 = new int[10];//排序过程暂存数据
boolean ifStart = false;//记录排序过程是否开始,如果开始则不接受其他开始请求
private JRadioButton[] rbSort =
{//排序方法单项选择
new JRadioButton("冒泡",true),
new JRadioButton("插入",false),
new JRadioButton("归并",false),
new JRadioButton("快排",false),
new JRadioButton("选择",false),
new JRadioButton("堆排",false),
new JRadioButton("希尔",false),
};
private JRadioButton[] rbArray =
{//排序样本单项选择
new JRadioButton("顺序",true),
new JRadioButton("倒序",false),
new JRadioButton("随机",false),
new JRadioButton("部分有序",false),
};
private ButtonGroup bgSort = new ButtonGroup();//排序方法单项选择组
private ButtonGroup bgArray = new ButtonGroup();//排序样本单项选择组
public BallPanel(int numOfBall,final int High,final int Width,final int trackW)
{//构造函数
this.setLayout(null);
setBackground(Color.white);
balls = new Ball[numOfBall];//numOfBall基本确定为10
trackWidth = trackW;
for(int i = 0 ; i < numOfBall; i++)
{//初始化
balls[theSort[i]] = new Ball();
balls[theSort[i]].setIcon(new ImageIcon("ball\\ball"+theSort[i]+".gif"));
balls[theSort[i]].setBounds(High+trackWidth*i, Width, 90, 90);
add(balls[theSort[i]]);
}
start = new JLabel();//开始按钮
start.setIcon(new ImageIcon("image\\start1.gif"));
start.setBounds(600, 20, 63, 63);
this.add(start);
start.addMouseListener(
new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
start.setIcon(new ImageIcon("image\\start2.gif"));
}
public void mouseReleased(MouseEvent e)
{
start.setIcon(new ImageIcon("image\\start1.gif"));
}
public void mouseClicked(MouseEvent e)
{
if(ifStart == false)
new Thread(BallPanel.this).start();
}
}
);
//////////////////单选按钮///////////////////
// LFunction = new JLabel();//排序算法单项选择
// LFunction.setIcon(new ImageIcon("image\\排序算法.gif"));
// LFunction.setBounds(1000, 1, 81, 23);
// this.add(LFunction);
ItemListener ilSort = new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
JRadioButton rbe = (JRadioButton)e.getSource();
String srbe = rbe.getText();
for(int i = 0;i<rbSort.length;i++)
{
if(srbe.equals(rbSort[i].getText()))
{
type = i;
break;
}
}
}
};
for(int i = 0;i<rbSort.length;i++)
{
rbSort[i].addItemListener(ilSort);
bgSort.add(rbSort[i]);
rbSort[i].setBackground(Color.white);
if(i <= 3)
rbSort[i].setBounds(668, (i)*23, 80, 23);
else
rbSort[i].setBounds(748, (i-3)*23, 80, 23);
this.add(rbSort[i]);
}
/////////////////////////////
// LSource = new JLabel();//排序样本单项选择
// LSource.setIcon(new ImageIcon("image\\排序样本.gif"));
// LSource.setBounds(813, 1, 81, 23);
// this.add(LSource);
ItemListener ilArray = new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
int typeArray = 0;
JRadioButton rbe = (JRadioButton)e.getSource();
String srbe = rbe.getText();
for(int i = 0;i<rbArray.length;i++)
{
if(srbe.equals(rbArray[i].getText()))
{
typeArray = i;
break;
}
}
switch(typeArray)
{
case(0):
{
for(int i = 0;i < 10; i++)
theSort[i]= theSortShun[i]; //安排小球的位置
//数组中的值为小球号
break;
}
case(1):
{
for(int i = 0;i < 10; i++)
theSort[i]= theSortNi[i]; //安排小球的位置
//数组中的值为小球号
break;
}
case(2):
{
for(int i = 0;i < 10; i++)
theSort[i]= theSortSui[i]; //安排小球的位置
//数组中的值为小球号
break;
}
case(3):
{
for(int i = 0;i < 10; i++)
theSort[i]= theSortParSui[i]; //安排小球的位置
//数组中的值为小球号
break;
}
default:
break;
}
for(int i = 0 ; i < 10; i++)
{//小球初始化
balls[theSort[i]].setIcon(new ImageIcon("ball\\ball"+theSort[i]+".gif"));
balls[theSort[i]].setBounds(High+trackWidth*i, Width, 90, 90);
// System.out.print(theSort[i]);
}
}
};
for(int i = 0;i<rbArray.length;i++)
{
rbArray[i].addItemListener(ilArray);
bgArray.add(rbArray[i]);
rbArray[i].setBackground(Color.white);
rbArray[i].setBounds(513, (i)*23, 80, 23);
this.add(rbArray[i]);
}
}
/****************run方法*******************/
public void run()
{//进行特定排序方法
ifStart = true;//排序算法开始
switch(type)
{//根据参数选定排序方法
case(-1):
{//测试方法
test();
break;
}
case(0):
{//冒泡方法
BubbleSort();
break;
}
case(1):
{//插入方法
InsertionSort();
break;
}
case(2):
{//归并方法
MergeSort();
break;
}
case(3):
{//快排方法
QuickSort();
break;
}
case(4):
{//选择方法
SelectSort();
break;
}
case(5):
{//堆排方法
HeapSort();
break;
}
case(6):
{//希尔方法
ShellSort();
break;
}
}
// for(int i = 0; i < 10; i++)
// System.out.print(theSort[i]);
// System.out.println();
ifStart = false;//排序算法结束
}
/*******************************排**序**算**法********************************/
private void test()
{//测试方法
// moveUpTheBallFromTo(0,4);
moveLfTheReal(4);
// System.out.println(findPlace(7));
}
//////////////////////////////////////////////////////////////
/*************冒泡算法*****************/
private void BubbleSort()
{//冒泡排序方法
boolean flag = true;
int i = 0;
for(i = 0;i < 10&&flag; i++)
{
flag = false;
for(int j = 0;j < 9-i; j++)
{
moveUpTheTwoOf(j,j+1);//拉起两个要操作的小球
if(theSort[j]>theSort[j+1])
{
changeTheTwoOf(j,j+1);//交换两个小球(本方法包含数组操作)
flag = true;
}
else{}
moveDnTheTwoOf(j,j+1);//放下操作完毕的小球
}
}
}
/*************冒泡over************
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Sort_show.rar (43个子文件)
sort_final
ball
ball0.gif 1KB
ball8.gif 1KB
ball2.gif 1KB
ball9.gif 1KB
ball3.gif 1KB
ball5.gif 1KB
ball1.gif 1KB
ball4.gif 1KB
Thumbs.db 10KB
ball6.gif 1KB
ball7.gif 1KB
bin
sort
BallPanel$3.class 2KB
BallFrame$1.class 1KB
Wait.class 448B
BallPanel$2.class 1KB
BallPanel$1.class 1KB
Ball.class 589B
BallFrame.class 2KB
BallMain.class 533B
BallPanel.class 12KB
image
start1.gif 3KB
start2.gif 3KB
Thumbs.db 15KB
大球.gif 51KB
排序算法.gif 2KB
排序样本.gif 1KB
.settings
org.eclipse.jdt.core.prefs 629B
src
sort
BallPanel$3.class 2KB
BallFrame$1.class 1KB
Wait.class 456B
BallPanel$2.class 1KB
BallPanel$1.class 1KB
Ball.class 597B
BallMain.java 264B
Ball.java 351B
BallFrame.class 2KB
BallPanel.java 19KB
BallFrame.java 2KB
Wait.java 193B
BallMain.class 549B
BallPanel.class 12KB
.project 386B
.classpath 226B
共 43 条
- 1
资源评论
alvarocfc
- 粉丝: 105
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功