seems to be working... with cancel button to terminate thread

git-svn-id: svn://anubis/gvsu@91 45c1a28c-8058-47b2-ae61-ca45b979098e
This commit is contained in:
josh 2008-03-28 23:50:45 +00:00
parent 1faf4bdb9b
commit 80ee38a8cb

View File

@ -8,6 +8,7 @@ import javax.swing.border.*;
public class KnightsTour extends JFrame
{
private KnightsTourBoard m_ktBoard = new KnightsTourBoard(5, 5);
private Thread m_tourThread;
/* GUI elements */
private ActionEventHandler m_handler = new ActionEventHandler(this);
@ -16,6 +17,7 @@ public class KnightsTour extends JFrame
private JTextField m_startXField;
private JTextField m_startYField;
private JButton m_startButton;
private JButton m_cancelButton;
private JPanel m_mainPanel;
private JPanel m_boardPanel;
private JLabel m_statusLabel;
@ -67,6 +69,9 @@ public class KnightsTour extends JFrame
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(m_startButton = new JButton("Start Knight's Tour"));
m_startButton.addActionListener(m_handler);
add(m_cancelButton = new JButton("Cancel Knight's Tour"));
m_cancelButton.addActionListener(m_handler);
m_cancelButton.setVisible(false);
add(new Box.Filler(new Dimension(0, 4),
new Dimension(0, 4),
new Dimension(0, 4)));
@ -91,9 +96,9 @@ public class KnightsTour extends JFrame
JPanel oldBoardPanel = m_boardPanel;
m_boardPanel = new JPanel(new GridLayout(height, width, 1, 1));
m_boardPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
JLabel l = new JLabel(m_ktBoard.getStepAt(x, y) == 0
? ""
@ -147,9 +152,22 @@ public class KnightsTour extends JFrame
createBoardPanel();
/* run the tour in a separate thread */
m_startButton.setEnabled(false);
m_startButton.setVisible(false);
m_cancelButton.setVisible(true);
new Thread(new TourThread(startx, starty)).start();
m_tourThread = new Thread(new TourThread(startx, starty));
m_tourThread.start();
}
else if (e.getSource() == m_cancelButton)
{
if (m_tourThread != null)
{
m_tourThread.stop();
m_tourThread = null;
m_startButton.setVisible(true);
m_cancelButton.setVisible(false);
m_statusLabel.setText("Cancelled.");
}
}
}
}
@ -173,7 +191,8 @@ public class KnightsTour extends JFrame
{
createBoardPanel();
m_statusLabel.setText("Finished.");
m_startButton.setEnabled(true);
m_startButton.setVisible(true);
m_cancelButton.setVisible(false);
}
});
}
@ -184,10 +203,12 @@ public class KnightsTour extends JFrame
{
createBoardPanel();
m_statusLabel.setText("Solution not found!");
m_startButton.setEnabled(true);
m_startButton.setVisible(true);
m_cancelButton.setVisible(false);
}
});
}
m_tourThread = null;
}
}