Created new abstract Controller class with load methods.

- loadScene method to load into current stage
- loadPopupScene method to load into a new window
- icon added to popup windows
- load methods return Controller of the new scee
- KeyBindingsController extends new Controller class and works correctly

#story[1261]
This commit is contained in:
Jessica Syder
2017-09-04 23:10:25 +12:00
parent 1073113589
commit 4a0d04d7ab
4 changed files with 97 additions and 32 deletions
@@ -1,6 +1,7 @@
package visualiser.Controllers;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
@@ -13,6 +14,7 @@ import javafx.scene.layout.AnchorPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import visualiser.Controllers2.Controller;
import visualiser.gameController.Keys.ControlKey;
import visualiser.gameController.Keys.KeyFactory;
@@ -25,7 +27,7 @@ import static visualiser.app.App.keyFactory;
/**
* Controller for the scene used to display and update current key bindings.
*/
public class KeyBindingsController {
public class KeyBindingsController extends Controller{
private @FXML Button btnSave;
private @FXML Button btnCancel;
private @FXML Button btnReset;
@@ -43,6 +45,7 @@ public class KeyBindingsController {
initializeTable();
populateTable();
setKeyListener();
setClosedListener();
}
/**
@@ -115,6 +118,29 @@ public class KeyBindingsController {
return newKeyFactory;
}
/**
* Creates a listener for when a user tries to close the current window.
*/
public void setClosedListener(){
anchor.sceneProperty().addListener((obsS, oldS, newS) -> {
if (newS != null) {
newS.windowProperty().addListener((obsW, oldW, newW) -> {
if (newW != null) {
Stage stage = (Stage)newW;
// WE is processed by onExit method
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
if (we.getEventType() == WindowEvent.WINDOW_CLOSE_REQUEST) {
onExit(we);
}
}
});
}
});
}
});
}
/**
* Creates a listener for the base anchorpane for key presses.
* It updates the current key bindings of the {@link KeyFactory} if
@@ -3,7 +3,6 @@ package visualiser.Controllers;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.layout.AnchorPane;
import visualiser.app.App;
import visualiser.gameController.ControllerClient;
import visualiser.model.VisualiserBoat;
import visualiser.model.VisualiserRaceEvent;
@@ -99,7 +98,7 @@ public class MainController extends Controller {
raceController.setParent(this);
connectionController.setParent(this);
finishController.setParent(this);
titleController.setParent(this);
// titleController.setParent(this);
hostController.setParent(this);
lobbyController.setParent(this);
@@ -1,16 +1,11 @@
package visualiser.Controllers;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import visualiser.Controllers2.Controller;
import visualiser.app.App;
import java.io.IOException;
@@ -42,7 +37,7 @@ public class TitleController extends Controller {
*/
public void hostAGame() throws IOException {
titleWrapper.setVisible(false);
parent.hostGame();
// parent.hostGame();
App.getStage().setResizable(true);
}
@@ -59,7 +54,7 @@ public class TitleController extends Controller {
*/
public void joinAGame() {
titleWrapper.setVisible(false);
parent.enterLobby();
// parent.enterLobby();
App.getStage().setResizable(true);
}
@@ -81,7 +76,7 @@ public class TitleController extends Controller {
dayModeRD.setSelected(false);
}
@Override
// @Override
public void initialize(URL location, ResourceBundle resources) {
}
@@ -90,26 +85,9 @@ public class TitleController extends Controller {
*/
public void controlBtnPressed(){
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/visualiser/scenes/keyBindings.fxml"));
Parent layout = loader.load();
Scene scene = new Scene(layout);
Stage popupStage = new Stage();
popupStage.setResizable(false);
popupStage.setTitle("Game Controls");
popupStage.initModality(Modality.WINDOW_MODAL);
popupStage.centerOnScreen();
popupStage.setScene(scene);
popupStage.show();
KeyBindingsController controller = loader.getController();
popupStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
if (we.getEventType() == WindowEvent.WINDOW_CLOSE_REQUEST) {
controller.onExit(we);
}
}
});
} catch (Exception e){
loadPopupScene("/visualiser/scenes/keyBindings.fxml",
"Game Controls", Modality.WINDOW_MODAL);
} catch (IOException e) {
e.printStackTrace();
}
}