import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class KnightsTour extends JFrame { private KnightsTourBoard m_ktBoard = new KnightsTourBoard(5, 5); /* GUI elements */ private ActionEventHandler m_handler; private JTextField m_widthField; private JTextField m_heightField; private JTextField m_startXField; private JTextField m_startYField; private JButton m_startButton; private JPanel m_boardPanel; private JPanel m_boardContainerPanel; private JLabel m_statusLabel; public KnightsTour() { super("Josh's Knights Tour project for CS621"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(500, 600); m_handler = new ActionEventHandler(this); Container c = getContentPane(); m_boardContainerPanel = new JPanel(); m_boardContainerPanel.setBorder( BorderFactory.createEmptyBorder(5, 0, 0, 0)); createBoardPanel(5, 5); /* set up the main window contents */ c.add(new JPanel(new BorderLayout()) {{ setBorder(BorderFactory.createEmptyBorder(9, 9, 9, 9)); add(new JPanel() {{ setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 7)); add(new JPanel() {{ /* board size panel */ setBorder(BorderFactory.createTitledBorder("Board Size")); add(new JPanel() {{ setBorder(BorderFactory.createEmptyBorder()); setLayout(new GridLayout(2, 2, 5, 5)); add(new JLabel("Width:", SwingConstants.RIGHT)); add(m_widthField = new JTextField("5")); add(new JLabel("Height:", SwingConstants.RIGHT)); add(m_heightField = new JTextField("5")); }}); }}); add(new Box.Filler(new Dimension(5, 0), new Dimension(5, 0), new Dimension(5, 0))); add(new JPanel() {{ /* starting position panel */ setBorder(BorderFactory.createTitledBorder("Starting Position")); add(new JPanel() {{ setBorder(BorderFactory.createEmptyBorder()); setLayout(new GridLayout(2, 2, 5, 5)); add(new JLabel("Column (X):", SwingConstants.RIGHT)); add(m_startXField = new JTextField("2")); add(new JLabel("Row (Y):", SwingConstants.RIGHT)); add(m_startYField = new JTextField("2")); }}); }}); add(new Box.Filler(new Dimension(5, 0), new Dimension(5, 0), new Dimension(5, 0))); add(new JPanel() {{ /* start button panel */ setBorder(BorderFactory.createTitledBorder("Start")); add(new JPanel() {{ setBorder(BorderFactory.createEmptyBorder()); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); add(m_startButton = new JButton("Start Knight's Tour")); add(m_statusLabel = new JLabel()); }}); }}); add(new Box.Filler(new Dimension(0, 0), new Dimension(Short.MAX_VALUE, 0), new Dimension(10000, 10000))); }}, BorderLayout.NORTH); add(m_boardContainerPanel); }}); setVisible(true); } private void createBoardPanel(int width, int height) { if (m_boardPanel != null) m_boardContainerPanel.remove(m_boardPanel); m_boardPanel = new JPanel(new GridLayout(width, height)); for (int x = 0; x < width; x++) { for (int y = 0; y < width; y++) { JLabel l = new JLabel(m_ktBoard.getStepAt(x, y) == 0 ? "h" : new Integer(m_ktBoard.getStepAt(x, y)).toString(), SwingConstants.CENTER); m_boardPanel.add(l); } } m_boardContainerPanel.add(m_boardPanel); m_boardContainerPanel.validate(); } private class ActionEventHandler implements ActionListener { private KnightsTour m_kt; public ActionEventHandler(KnightsTour kt) { m_kt = kt; } public void actionPerformed(ActionEvent e) { } } public static void main(String[] args) { KnightsTour kt = new KnightsTour(); } }