packagecom.edusys.ui;importjava.awt.Dimension;importjava.awt.Font;importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.List;importjavax.swing.ButtonGroup;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JPasswordField;importjavax.swing.JRadioButton;importjavax.swing.JScrollPane;importjavax.swing.JSlider;importjavax.swing.JTable;importjavax.swing.JTextArea;importjavax.swing.JTextField;importjavax.swing.ScrollPaneConstants;importjavax.swing.event.ChangeEvent;importjavax.swing.event.ChangeListener;importcom.edusys.utils.FileUtils;importcom.edusys.utils.HistogramUtils;importcom.edusys.utils.SortEntity;importcom.edusys.utils.SortUtils;importcom.edusys.utils.TimeUtils;public classMainUI {private static int sort_type=0;private static int speed=1;private static int sleeptime=100;private static int count=0;private static boolean play_flag=false;private static boolean start_flag=false;private static ListsortList;public static voidmain(String[] args) {
MainUI.animation();
}/*** 算法动画演示*/
public static voidanimation(){final JFrame frame=newJFrame();
frame.setSize(1000,620);
frame.setVisible(true);
frame.setResizable(false);
frame.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-1000)/2,
(Toolkit.getDefaultToolkit().getScreenSize().height-620)/2);
frame.setTitle("Algorithm Teaching System");
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sleeptime=100/speed;final SortUtils sortUtils=newSortUtils();if(sort_type==0){
sortList=sortUtils.getQuickList();
}else if(sort_type==1){
sortList=sortUtils.getBubbleList();
}else{
sortList=sortUtils.getShellList();
}int len=sortList.size();
JPanel jPanel_sort=newJPanel();
HistogramUtils histogramUtils=newHistogramUtils(sortList.get(count));
jPanel_sort=histogramUtils.createPanel();
frame.add(jPanel_sort);
jPanel_sort.setBounds(0, 0, 450, 600);
JLabel jLabel_title=new JLabel("Sort Algorithm");
frame.add(jLabel_title);
jLabel_title.setBounds(500, 20, 120, 30);
JRadioButton jRadioButton_quick=new JRadioButton("Qucik Sort");
frame.add(jRadioButton_quick);if(sort_type==0){
jRadioButton_quick.setSelected(true);
}
jRadioButton_quick.setBounds(500, 50, 120, 30);
jRadioButton_quick.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
sort_type=0;
frame.dispose();
MainUI.animation();
}
});
JRadioButton jRadioButton_bubble=new JRadioButton("Bubble Sort");
frame.add(jRadioButton_bubble);
jRadioButton_bubble.setBounds(500, 80, 120, 30);if(sort_type==1){
jRadioButton_bubble.setSelected(true);
}
jRadioButton_bubble.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
sort_type=1;
frame.dispose();
MainUI.animation();
}
});
JRadioButton jRadioButton_shell=new JRadioButton("Shell Sort");
frame.add(jRadioButton_shell);
jRadioButton_shell.setBounds(500, 110, 120, 30);if(sort_type==2){
jRadioButton_shell.setSelected(true);
}
jRadioButton_shell.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
sort_type=2;
frame.dispose();
MainUI.animation();
}
});
ButtonGroup buttonGroup_sort=newButtonGroup();
buttonGroup_sort.add(jRadioButton_shell);
buttonGroup_sort.add(jRadioButton_bubble);
buttonGroup_sort.add(jRadioButton_quick);
JLabel jLabel_speed=new JLabel("Speed");
frame.add(jLabel_speed);
jLabel_speed.setBounds(620, 160, 120, 30);
JSlider jSlider_speed= new JSlider(1, 5, 1);
frame.add(jSlider_speed);
jSlider_speed.setBounds(500, 190, 300, 40);
jSlider_speed.setMajorTickSpacing(1);
jSlider_speed.setPaintTicks(true);
jSlider_speed.setPaintLabels(true);
jSlider_speed.addChangeListener(newChangeListener() {
@Overridepublic voidstateChanged(ChangeEvent e) {
speed=jSlider_speed.getValue();
sleeptime=100/speed;
}
});
JButton jButton_start=new JButton("Start");
frame.add(jButton_start);
jButton_start.setBounds(500, 320, 80, 30);
jButton_start.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
start_flag=true;newThread(){
@Overridepublic voidrun(){while (count
try{
Thread.sleep(sleeptime);
}catch(InterruptedException e1) {
e1.printStackTrace();
}
JPanel jPanel_sort=newJPanel();
HistogramUtils histogramUtils=newHistogramUtils(sortList.get(count));
jPanel_sort=histogramUtils.createPanel();
frame.add(jPanel_sort);
jPanel_sort.setBounds(0, 0, 450, 600);
count++;
}
}
}.start();
jButton_start.setEnabled(false);
}
});
JButton jButton_restart=new JButton("Restart");
frame.add(jButton_restart);
jButton_restart.setBounds(600, 320, 80, 30);
jButton_restart.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
frame.dispose();
MainUI.animation();
}
});
JButton jButton_pause=new JButton("Pause");
frame.add(jButton_pause);
jButton_pause.setBounds(700, 320, 80, 30);
jButton_pause.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {if(!play_flag){
start_flag=false;
jButton_pause.setText("Play");
play_flag=true;
}else{
start_flag=true;
jButton_pause.setText("Pause");
play_flag=false;newThread(){
@Overridepublic voidrun(){while (count
try{
Thread.sleep(sleeptime);
}catch(InterruptedException e1) {
e1.printStackTrace();
}
JPanel jPanel_sort=newJPanel();
HistogramUtils histogramUtils=newHistogramUtils(sortList.get(count));
jPanel_sort=histogramUtils.createPanel();
frame.add(jPanel_sort);
jPanel_sort.setBounds(0, 0, 450, 600);
count++;
}
}
}.start();
}
}
});
JButton jButton_forward=new JButton("Forward");
frame.add(jButton_forward);
jButton_forward.setBounds(800, 320, 80, 30);
jButton_forward.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {if(count
count++;
JPanel jPanel_sort=newJPanel();
HistogramUtils histogramUtils=newHistogramUtils(sortList.get(count));
jPanel_sort=histogramUtils.createPanel();
frame.add(jPanel_sort);
jPanel_sort.setBounds(0, 0, 450, 600);
}
}
});
JButton jButton_back=new JButton("Back");
frame.add(jButton_back);
jButton_back.setBounds(900, 320, 80, 30);
jButton_back.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {if(count>0){
count--;
JPanel jPanel_sort=newJPanel();
HistogramUtils histogramUtils=newHistogramUtils(sortList.get(count));
jPanel_sort=histogramUtils.createPanel();
frame.add(jPanel_sort);
jPanel_sort.setBounds(0, 0, 450, 600);
}
}
});
JButton jButton_back2menu=new JButton("Back To Menu");
frame.add(jButton_back2menu);
jButton_back2menu.setBounds(700, 360, 120, 30);
jButton_back2menu.addActionListener(newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
frame.dispose();
MainUI.explanation();
}
});newThread(){
@Overridepublic voidrun(){while (count
try{
Thread.sleep(sleeptime);
}catch(InterruptedException e1) {
e1.printStackTrace();
}
JPanel jPanel_sort=newJPanel();
HistogramUtils histogramUtils=newHistogramUtils(sortList.get(count));
jPanel_sort=histogramUtils.createPanel();
frame.add(jPanel_sort);
jPanel_sort.setBounds(0, 0, 450, 600);
count++;
}
}
}.start();
}
}