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:
@@ -1,6 +1,7 @@
|
|||||||
package visualiser.Controllers;
|
package visualiser.Controllers;
|
||||||
|
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
|
import javafx.event.EventHandler;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
@@ -13,6 +14,7 @@ import javafx.scene.layout.AnchorPane;
|
|||||||
import javafx.stage.Modality;
|
import javafx.stage.Modality;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.stage.WindowEvent;
|
import javafx.stage.WindowEvent;
|
||||||
|
import visualiser.Controllers2.Controller;
|
||||||
import visualiser.gameController.Keys.ControlKey;
|
import visualiser.gameController.Keys.ControlKey;
|
||||||
import visualiser.gameController.Keys.KeyFactory;
|
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.
|
* 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 btnSave;
|
||||||
private @FXML Button btnCancel;
|
private @FXML Button btnCancel;
|
||||||
private @FXML Button btnReset;
|
private @FXML Button btnReset;
|
||||||
@@ -43,6 +45,7 @@ public class KeyBindingsController {
|
|||||||
initializeTable();
|
initializeTable();
|
||||||
populateTable();
|
populateTable();
|
||||||
setKeyListener();
|
setKeyListener();
|
||||||
|
setClosedListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -115,6 +118,29 @@ public class KeyBindingsController {
|
|||||||
return newKeyFactory;
|
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.
|
* Creates a listener for the base anchorpane for key presses.
|
||||||
* It updates the current key bindings of the {@link KeyFactory} if
|
* It updates the current key bindings of the {@link KeyFactory} if
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package visualiser.Controllers;
|
|||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.layout.AnchorPane;
|
import javafx.scene.layout.AnchorPane;
|
||||||
import visualiser.app.App;
|
|
||||||
import visualiser.gameController.ControllerClient;
|
import visualiser.gameController.ControllerClient;
|
||||||
import visualiser.model.VisualiserBoat;
|
import visualiser.model.VisualiserBoat;
|
||||||
import visualiser.model.VisualiserRaceEvent;
|
import visualiser.model.VisualiserRaceEvent;
|
||||||
@@ -99,7 +98,7 @@ public class MainController extends Controller {
|
|||||||
raceController.setParent(this);
|
raceController.setParent(this);
|
||||||
connectionController.setParent(this);
|
connectionController.setParent(this);
|
||||||
finishController.setParent(this);
|
finishController.setParent(this);
|
||||||
titleController.setParent(this);
|
// titleController.setParent(this);
|
||||||
hostController.setParent(this);
|
hostController.setParent(this);
|
||||||
lobbyController.setParent(this);
|
lobbyController.setParent(this);
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
package visualiser.Controllers;
|
package visualiser.Controllers;
|
||||||
|
|
||||||
import javafx.event.EventHandler;
|
|
||||||
import javafx.fxml.FXML;
|
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.Button;
|
||||||
import javafx.scene.control.RadioButton;
|
import javafx.scene.control.RadioButton;
|
||||||
import javafx.scene.layout.AnchorPane;
|
import javafx.scene.layout.AnchorPane;
|
||||||
import javafx.stage.Modality;
|
import javafx.stage.Modality;
|
||||||
import javafx.stage.Stage;
|
import visualiser.Controllers2.Controller;
|
||||||
import javafx.stage.WindowEvent;
|
|
||||||
import visualiser.app.App;
|
import visualiser.app.App;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -42,7 +37,7 @@ public class TitleController extends Controller {
|
|||||||
*/
|
*/
|
||||||
public void hostAGame() throws IOException {
|
public void hostAGame() throws IOException {
|
||||||
titleWrapper.setVisible(false);
|
titleWrapper.setVisible(false);
|
||||||
parent.hostGame();
|
// parent.hostGame();
|
||||||
App.getStage().setResizable(true);
|
App.getStage().setResizable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +54,7 @@ public class TitleController extends Controller {
|
|||||||
*/
|
*/
|
||||||
public void joinAGame() {
|
public void joinAGame() {
|
||||||
titleWrapper.setVisible(false);
|
titleWrapper.setVisible(false);
|
||||||
parent.enterLobby();
|
// parent.enterLobby();
|
||||||
App.getStage().setResizable(true);
|
App.getStage().setResizable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +76,7 @@ public class TitleController extends Controller {
|
|||||||
dayModeRD.setSelected(false);
|
dayModeRD.setSelected(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// @Override
|
||||||
public void initialize(URL location, ResourceBundle resources) {
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,26 +85,9 @@ public class TitleController extends Controller {
|
|||||||
*/
|
*/
|
||||||
public void controlBtnPressed(){
|
public void controlBtnPressed(){
|
||||||
try {
|
try {
|
||||||
FXMLLoader loader = new FXMLLoader();
|
loadPopupScene("/visualiser/scenes/keyBindings.fxml",
|
||||||
loader.setLocation(getClass().getResource("/visualiser/scenes/keyBindings.fxml"));
|
"Game Controls", Modality.WINDOW_MODAL);
|
||||||
Parent layout = loader.load();
|
} catch (IOException e) {
|
||||||
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){
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package visualiser.Controllers2;
|
||||||
|
|
||||||
|
import javafx.fxml.FXMLLoader;
|
||||||
|
import javafx.scene.Parent;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
import javafx.stage.Modality;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import visualiser.app.App;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract controller class to give each subclass the functionality to load
|
||||||
|
* a new scene into the existing stage, or create a new popup window.
|
||||||
|
*/
|
||||||
|
public abstract class Controller {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to load a new scene in the currently open stage.
|
||||||
|
* @param fxmlUrl the URL of the FXML file to be loaded
|
||||||
|
* @return the controller of the new scene
|
||||||
|
* @throws IOException if there is an issue with the fxmlUrl
|
||||||
|
*/
|
||||||
|
protected Controller loadScene(String fxmlUrl) throws IOException {
|
||||||
|
FXMLLoader loader = new FXMLLoader();
|
||||||
|
loader.setLocation(getClass().getResource(fxmlUrl));
|
||||||
|
Parent root = loader.load();
|
||||||
|
Stage stage = App.getStage();
|
||||||
|
Scene scene = new Scene(root);
|
||||||
|
stage.setScene(scene);
|
||||||
|
stage.show();
|
||||||
|
|
||||||
|
return loader.getController();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to load a scene in a new separate popup stage.
|
||||||
|
* @param fxmlUrl the URL of the FXML file to be loaded
|
||||||
|
* @param title title for the new window
|
||||||
|
* @param modality modality settings for popup window
|
||||||
|
* @return the controller of the new scene
|
||||||
|
* @throws IOException if there is an issue with the fxmlUrl
|
||||||
|
*/
|
||||||
|
protected Controller loadPopupScene(String fxmlUrl, String title, Modality
|
||||||
|
modality) throws IOException {
|
||||||
|
FXMLLoader loader = new FXMLLoader();
|
||||||
|
loader.setLocation(getClass().getResource(fxmlUrl));
|
||||||
|
Parent root = loader.load();
|
||||||
|
Stage stage = new Stage();
|
||||||
|
stage.initModality(modality);
|
||||||
|
stage.setTitle(title);
|
||||||
|
stage.centerOnScreen();
|
||||||
|
stage.getIcons().add(new Image(getClass().getClassLoader().getResourceAsStream("images/SailIcon.png")));
|
||||||
|
Scene scene = new Scene(root);
|
||||||
|
stage.setScene(scene);
|
||||||
|
stage.show();
|
||||||
|
|
||||||
|
return loader.getController();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user