1 import java.awt.event.*;2 import javax.swing.*;3 import java.awt.*;4 import java.util.*;5 import java.math.*;6
7 public class UI extendsJFrame{8
9 staticJPanel MainPanel,ButtonPanel,OpPanel;10 staticJLabel Steps;11 staticJButton Set,Solve,Clear;12 staticJComboBox Diff;13 static Font font = new Font("Times New Roman",Font.BOLD,20);14 static int[][] mmp = new int[3][20];15 static int[] Len = new int[3];16 static intnowPage;17 staticGraphics2D G;18 staticHanoi hanoi;19 staticJButton prev,next;20 publicUI(){21 this.setTitle("Tower of Hanoi");22
23 ButtonPanel = new JPanel(null);24 ButtonPanel.setBackground(Color.BLACK);25 ButtonPanel.setPreferredSize(new Dimension(800,50));26 this.add(ButtonPanel,BorderLayout.NORTH);27
28 Set = new JButton("Set");29 Set.setBounds(100,5,150,40);30 Set.setFont(font);31 Set.setEnabled(true);32 Set.setMargin(new Insets(0,0,0,0));33 Set.addActionListener(newActionListener() {34 public voidactionPerformed(ActionEvent e) {35 hanoi = new Hanoi(Diff.getSelectedIndex() + 1);36 G.setColor(Color.WHITE);37 G.fillRect(0, 0, 800, 600);38 Diff.setEnabled(false);39 nowPage = 0;40 Steps.setText("Step " +String.valueOf(nowPage));41 Draw(0,G);42 }43 });44 ButtonPanel.add(Set);45
46 Diff = newJComboBox();47 for(int i = 1;i <= 6;i ++){Diff.addItem(i);}48 Diff.setBounds(250,5,50,40);49 Diff.setFont(font);50 ButtonPanel.add(Diff);51
52 Clear = new JButton("Clear");53 Clear.setBounds(550,5,150,40);54 Clear.setFont(font);55 Clear.setEnabled(true);56 Clear.setMargin(new Insets(0,0,0,0));57 Clear.addActionListener(newActionListener() {58 public voidactionPerformed(ActionEvent e) {59 Diff.setEnabled(true);60 hanoi = null;61 Set.setEnabled(true);62 Solve.setEnabled(true);63 G.setColor(Color.WHITE);64 G.fillRect(0, 0, 800, 600);65 Steps.setText("Step Null");66 next.setEnabled(false);67 prev.setEnabled(false);68 }69 });70 ButtonPanel.add(Clear);71
72 Solve = new JButton("Solve");73 Solve.setBounds(350,5,150,40);74 Solve.setFont(font);75 Solve.setEnabled(true);76 Solve.setMargin(new Insets(0,0,0,0));77 Solve.addActionListener(newActionListener() {78 public voidactionPerformed(ActionEvent e) {79 if(hanoi == null) {return;}80 hanoi.Solve();81 Set.setEnabled(false);82 Solve.setEnabled(false);83 next.setEnabled(true);84 prev.setEnabled(true);85 }86 });87 ButtonPanel.add(Solve);88
89 OpPanel = new JPanel(null);90 OpPanel.setBackground(Color.BLACK);91 OpPanel.setPreferredSize(new Dimension(800,50));92 this.add(OpPanel,BorderLayout.SOUTH);93
94 prev = new JButton("<
111 next = new JButton(">>");112 next.setBounds(550,5,150,40);113 next.setFont(font);114 next.setEnabled(false);115 next.setMargin(new Insets(0,0,0,0));116 next.addActionListener(newActionListener() {117 public voidactionPerformed(ActionEvent e) {118 if(nowPage + 1 > hanoi.maxStep){return;}119 G.setColor(Color.WHITE);120 G.fillRect(0, 0, 800, 600);121 nowPage ++;122 Steps.setText("Step " +String.valueOf(nowPage));123 Draw(nowPage,G);124 }125 });126 OpPanel.add(next);127
128 Steps = new JLabel("Step Null",JLabel.CENTER);129 Steps.setBounds(300,5,150,40);130 Steps.setFont(new Font("Times New Roman",Font.BOLD,25));131 Steps.setForeground(Color.WHITE);132 OpPanel.add(Steps);133
134 MainPanel = newJPanel();135 MainPanel.setBackground(Color.WHITE);136 this.add(MainPanel);137 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);138 this.setSize(800, 600);139 Dimension winSize =Toolkit.getDefaultToolkit().getScreenSize();140 this.setLocation((winSize.width - this.getWidth()) / 2,(winSize.height - this.getHeight()) / 2);141 this.setResizable(false);142 this.setVisible(true);143 G =(Graphics2D)MainPanel.getGraphics();144 }145
146 public void Draw(intx,Graphics G) {147 G.setColor(Color.DARK_GRAY);148 G.fillRect(50, 350, 200, 30);149 G.fillRect(300, 350, 200, 30);150 G.fillRect(550, 350, 200, 30);151 G.setColor(Color.BLUE);152 for(int i = 0;i < hanoi.ans[x][0].size();i ++) {153 int s = hanoi.ans[x][0].get(i);154 G.drawRect(150 - 15 * s, 320 - 30 * i, 30 * s, 30);155 }156 for(int i = 0;i < hanoi.ans[x][1].size();i ++) {157 int s = hanoi.ans[x][1].get(i);158 G.drawRect(400 - 15 * s, 320 - 30 * i, 30 * s, 30);159 }160 for(int i = 0;i < hanoi.ans[x][2].size();i ++) {161 int s = hanoi.ans[x][2].get(i);162 G.drawRect(650 - 15 * s, 320 - 30 * i, 30 * s, 30);163 }164 }165
166 public static voidmain(String[] args) {167 newUI();168 }169
170 }