import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.Panel; import java.util.Stack; import javax.swing.JApplet; import javax.swing.JButton; /** * @author RPJ * @version 14iii09 * */ public class MagicSquareSolver extends JApplet implements Runnable { private static final int SIZE = 3; private int numCells = SIZE * SIZE; private Stack candidates; private PartialSquare candidate; private Panel myPanel; // for graphic display private JButton[] myButtons; // for graphic display public void init() { candidates = new Stack(); candidate = new PartialSquare(SIZE); candidates.add(candidate); setUpDisplay(); (new Thread(this)).start(); } public void run() { while (!candidates.isEmpty()) { candidate = candidates.pop(); updateDisplay(); if (candidate.success()) break; for (PartialSquare ps : candidate.successors()) candidates.push(ps); } System.out.println("done"); } // Stuff for the graphic display below here public void setUpDisplay() { setSize(400,400); setLayout(new BorderLayout()); myPanel = new Panel(); myPanel.setLayout(new GridLayout(SIZE,SIZE)); myButtons = new JButton[numCells]; for (int i = 0; i < numCells; i++) { // fill the panel with 0 myButtons[i] = new JButton(""+0); myPanel.add(myButtons[i]); } add(myPanel, BorderLayout.CENTER); } public void updateDisplay() { int i = 0; for (int num : candidate.getNums()) myButtons[i++].setText(""+num); validate(); } }