📄 mazegui.java
字号:
}
//Pause
case Manager.STATE_SOLVING:
{
manager.pauseSolve();
break;
}
//Resume
case Manager.STATE_SOLVE_PAUSED:
{
continueSolve(delay);
break;
}
case Manager.STATE_CLEAR:
case Manager.STATE_BUILDING:
case Manager.STATE_BUILD_PAUSED:
default:
{
displayErrorMessage("Invalid state: "+state+" encountered in actionListener for btnSolveAndPause.", "Paranoia error");
return;
}
}
}
else if(event.getSource() == btnResetSolve)
{
switch(state)
{
case Manager.STATE_BUILDING:
case Manager.STATE_SOLVING:
{
displayErrorMessage("An operation is in progress, cannot reset!", "Paranoia error");
return;
}
case Manager.STATE_BUILD_PAUSED:
case Manager.STATE_BUILD_FINISHED:
{
displayErrorMessage("Nothing to reset, use 'Reset all'.", "Paranoia error");
return;
}
case Manager.STATE_SOLVE_PAUSED:
case Manager.STATE_SOLVED:
case Manager.STATE_CLEAR:
{
manager.clearSolveState();
return;
}
}
}
else if(event.getSource() == tbtnBuildColors)
{
this.mazePanel.setDrawClrSquares( tbtnBuildColors.isSelected() );
this.mazePanel.repaint();
}
}
/*
* ##### EVENT HANDLE FUNCTIONS #####
*/
/**
* Starts a worker thread to start a build operation.
*/
private void startBuild(int delay)
{
int buildAlgorithm = -1;
for(int i = 0; i < rbtnBuildAlgorithms.length; i++)
{
if(rbtnBuildAlgorithms[i].isSelected())
{
buildAlgorithm = i;
break;
}
}
if (buildAlgorithm == -1)
{
displayErrorMessage("No algorithm associated with selected build algorithm.", "Unimplemented");
return;
}
//Start the build thread.
new Thread( new WTStartBuild(buildAlgorithm, delay) ).start();
}
/**
* Starts a worker thread to continue the build operation.
*/
private void continueBuild(int delay)
{
//Start thread to continue the build.
new Thread( new WTContinueBuild(delay) ).start();
}
/**
* Starts a worker thread to start a solve operation.
*/
private void startSolve(int delay)
{
int solveAlgorithm = -1;
//Check every radio button
for(int i = 0; i < rbtnSolveAlgorithms.length; i++)
{
if(rbtnSolveAlgorithms[i].isSelected())
{
solveAlgorithm = i;
break;
}
}
if(solveAlgorithm == -1)
{
displayErrorMessage("No algorithm associated with selected solve algorithm.", "Unimplemented");
return;
}
//Start the solve thread.
new Thread( new WTStartSolve(solveAlgorithm, delay) ).start();
}
/**
* Starts a worker thread to continue the solve operation.
*/
private void continueSolve(int delay)
{
new Thread( new WTContinueSolve(delay) ).start();
}
/**
* Called by the actionListener to adjust the maze size.
* @param x Width
* @param y Height
*/
private void handleResize(int x, int y)
{
Maze maze = manager.resizeMaze(x, y);
//Remove the old mazePanel
frame.getContentPane().remove( mazePanel );
//Insert a new maze panel
insertMazePanel(maze);
//Reflect the state
this.reflectStateChange();
}
/**
* Is called to reflect changes in the state of the manager.
* Should only be called from the event dispatching thread.
*/
public void reflectStateChange()
{
//Should be run from the event thread.
if(! SwingUtilities.isEventDispatchThread())
throw new WrongThreadException("MazeGui.reflectStateChange()");
int state = manager.getState();
//Only reformat when needed.
if(state == currentGuiState)
return;
currentGuiState = state;
switch( state )
{
case Manager.STATE_CLEAR:
{
btnUpdateSize.setEnabled(true);
btnBuildAndPause.setText("Build");
btnBuildAndPause.setEnabled(true);
btnResetAll.setEnabled(false);
btnPostBuild.setEnabled(false);
btnSolveAndPause.setText("Solve");
btnSolveAndPause.setEnabled(false);
btnResetSolve.setEnabled(false);
break;
}
case Manager.STATE_BUILDING:
{
btnUpdateSize.setEnabled(false);
btnBuildAndPause.setText("Pause");
btnBuildAndPause.setEnabled(true);
btnResetAll.setEnabled(false);
btnPostBuild.setEnabled(false);
btnSolveAndPause.setText("Solve");
btnSolveAndPause.setEnabled(false);
btnResetSolve.setEnabled(false);
break;
}
case Manager.STATE_BUILD_PAUSED:
{
btnUpdateSize.setEnabled(true);
btnBuildAndPause.setText("Resume");
btnBuildAndPause.setEnabled(true);
btnResetAll.setEnabled(true);
btnPostBuild.setEnabled(false);
btnSolveAndPause.setText("Solve");
btnSolveAndPause.setEnabled(false);
btnResetSolve.setEnabled(false);
break;
}
case Manager.STATE_BUILD_FINISHED:
{
btnUpdateSize.setEnabled(true);
btnBuildAndPause.setText("Build");
btnBuildAndPause.setEnabled(true);
btnResetAll.setEnabled(true);
btnPostBuild.setEnabled(true);
btnSolveAndPause.setText("Solve");
btnSolveAndPause.setEnabled(true);
btnResetSolve.setEnabled(false);
break;
}
case Manager.STATE_SOLVING:
{
btnUpdateSize.setEnabled(false);
btnBuildAndPause.setText("Build");
btnBuildAndPause.setEnabled(false);
btnResetAll.setEnabled(false);
btnPostBuild.setEnabled(false);
btnSolveAndPause.setText("Pause");
btnSolveAndPause.setEnabled(true);
btnResetSolve.setEnabled(false);
break;
}
case Manager.STATE_SOLVE_PAUSED:
{
btnUpdateSize.setEnabled(true);
btnBuildAndPause.setText("Build");
btnBuildAndPause.setEnabled(true);
btnResetAll.setEnabled(true);
btnPostBuild.setEnabled(false);
btnSolveAndPause.setText("Resume");
btnSolveAndPause.setEnabled(true);
btnResetSolve.setEnabled(true);
break;
}
case Manager.STATE_SOLVED:
{
btnUpdateSize.setEnabled(true);
btnBuildAndPause.setText("Build");
btnBuildAndPause.setEnabled(true);
btnResetAll.setEnabled(true);
btnPostBuild.setEnabled(false);
btnSolveAndPause.setText("Solve");
btnSolveAndPause.setEnabled(true);
btnResetSolve.setEnabled(true);
break;
}
default:
{
throw new RuntimeException("Unknown state encountered in MazeGui.reflectStateChange().");
}
}
//Reformat the components
btnUpdateSize.invalidate();
btnBuildAndPause.invalidate();
btnResetAll.invalidate();
btnSolveAndPause.invalidate();
btnResetSolve.invalidate();
}
/**
* Used to update relevant benchmarks in its panel
* @param buildTime Total time to build
* @param buildTick Ticks done to build
* @param solveTime Total time to solve
* @param solveTick Ticks done to solve
*/
public void updateBenchmark(long buildTime, long buildTick,
long solveTime, long solveTick)
{
//Should be run from the event thread.
if(! SwingUtilities.isEventDispatchThread())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -