-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Structuur
views
je view heeft alle layout in een GameListView.fxml
bestand in het mapje views/layout
Deze fxml moet een java class hebben als controller GameListView.java
in het mapje views
fx:controller="views.GameListView"
deze GameListView
class
- heeft toegang tot de
MainView
viaparent
- mag een controlller hebben en daarmee dus een onderwerp
- andere controllers mogen wel benaderd worden voor listeners
- heeft een
session
die de ingelogde user bevat - heeft toegang tot controllers die gedefinieerd zijn in de superclasse(
View
) - alle methodes die direct vanuit FXML worden aangeroepen moeten de
@FXML
annotatie hebben - alle variabelen die direct vanuit FXML komen moeten de
@FXML
annotatie hebben
public class GameListView extends View {
@Override
public void refresh() {
//dit word aangeroepen zodra de view tevoorschijn komt
}
@Override
public void constructor() {
//dit wordt aangeroepen zodra de applicatie gestart wordt
}
}
nu moet je je view toevoegen aan de main view:
- in de
MainView.fxml
:
<TabPane fx:id="control">
<fx:include fx:id="gameListView" source="GameListView.fxml"/>
</TabPane>
of:
<StackPane fx:id="content" VBox.vgrow="ALWAYS">
<fx:include fx:id="loginView" source="LoginView.fxml"/>
</StackPane>
- in de bijbehorende java class
MainView
:
// de java classe die de controller is van jouw fxml
@FXML private GameListView gameListViewController;
//het eerste object in de fxml van jouw view
@FXML private Tab GameListView;
let op, zet altijd alleen @FXML voor je variablen of methodes als deze puur door FXML gebruikt wordt, niet voor normale variablen
- in de
initialize()
methode van main staat een lijst waar je je ViewController aan toevoegd zodat deze zijn parent krijgt, en zodat de constructor methode wordt aangeroepen- de currentUser is altijd gezet voordat je contstructor word aangeroepen.
- om vanuit je view een tabje te laten zien doe je
parent.setTab(parent.gameListView);
- om vanuit je view een andere view te laten zien doe je
parent.setContent(parent.loginView);
controllers
- heeft een (observable) array met zijn "onderwerp"
- heeft een refresh methode om de array opnieuw uit de database te vullen
- heeft database access d.m.v. bijvoorbeeld de
gameDAO
- heeft getters voor de andere controllers
- heeft een
getSession()
methode voor de huidig ingelogde user - moet geregistreerd worden in classe
ControllerFactory
public class GameController extends Controller {
private ObservableList<Game> games;
public GameController(ControllerFactory factory) {
super(factory);
games.setAll(gameDAO.selectGames());
}
public ObservableList<Game> getGames() {
return games;
}
public void refresh() {
games.setAll(gameDAO.selectGames());
}
}
Domain Classes (models)
heeft alleen info over zichzelf, en geen connectie(of enig inzicht) met database(alles via controller)
Database Access Object (DAO)
- let op, sinds #69 is deze niet meer static
- is de vertaal slag tussen onze applicatie en de database
- weet welke kolomen naar welke waardes moeten( Game constructor weet dit niet! )
- geeft alleen objecten terug(geen integers, strings of booleans etc)
Enumerations
- staan in package
enumerations
- heeft methode statische methode
parse(String s)
die de goede enum waarde returned(voor uitlezen db) - mag optioneel een statische
format(GameType type)
methode heeft die een mooie toString() zou kunnen implementeren