Hallo Leute,
da ich in meinem Programm öfters mal einen neues Fenster erstellen muss und es sehr unschön finde, wenn die ganzen Parameter im Code stehen, habe ich mir was kleines geschrieben.
Es muss immer eine Klasse existieren, die den selben Namen trägt, wie die FXML Datei und von der Klasse View abstammt
Die View Klasse ist dafür zuständig, das neue Fenster zu erstellen.
Übergabeparemter stehen in einer .properties Datei, die Höhe und Breite des Fenster muss in der FXML Datei definiert werden, genauso wie Controller und .css Datei.
Und so könnte die .properties Datei aussehen
Und so würde man das ganze aufrufen.
Was meint ihr dazu?Was könnte man noch besser machen, oder was würdet ihr noch anders machen?
-GhostfaceChilla-
da ich in meinem Programm öfters mal einen neues Fenster erstellen muss und es sehr unschön finde, wenn die ganzen Parameter im Code stehen, habe ich mir was kleines geschrieben.
Java:
public class Login extends View{ }
Java:
/**
* Diese Klasse dient dazu, das laden der FXML und das erstellen der passenden
* View zu automatisieren.
*
* @author Christian
*/
public abstract class View {
private String fxmlName;
private String windowName;
private String modality;
private boolean resizable;
private static final String propertiesURL = "src/homenizer/view/view.properties";
protected View() {
try {
loadProperties();
init();
} catch (Exception ex) {
Logger.getLogger(View.class.getName()).log(Level.SEVERE, null, ex);
}
}
private boolean wrapStringToBoolean(String prop) throws Exception{
switch (prop) {
case "true":
return true;
case "false":
return false;
}
return true;
}
private void init() throws IOException{
Parent root = FXMLLoader.load(getClass().getResource(fxmlName));
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle(windowName);
stage.setResizable(resizable);
stage.initModality(Modality.valueOf(modality));
stage.show();
}
/**
* Diese Methode liest die Eigenschaften fxm-name , window-name, modality
* in die entsprechenden Variablen.
* @throws FileNotFoundException
* @throws IOException
*/
private void loadProperties() throws FileNotFoundException, IOException, Exception{
FileInputStream fis = new FileInputStream(new File(propertiesURL));
Properties prop = new Properties();
prop.load(fis);
String prefix = getClass().getSimpleName().toLowerCase(); //Erfragen
//des Namens der Klasse
fxmlName = prop.getProperty(prefix+"-fxml-name");
windowName = prop.getProperty(prefix+"-window-name");
modality = prop.getProperty(prefix+"-modality");
resizable = wrapStringToBoolean(prop.getProperty(prefix+"-resizable"));
}
}
Übergabeparemter stehen in einer .properties Datei, die Höhe und Breite des Fenster muss in der FXML Datei definiert werden, genauso wie Controller und .css Datei.
Code:
#Properties Datei für alle Views
#Namenskonvention:
#<classname><attribut>
#<attribut> = -fxml-name
# -window-name
# -modality
#Application
application-fxml-name = /homenizer/view/application/application.fxml
application-window-name = Homenizer
application-modality = NONE
application-resizable = true
#Login
login-fxml-name = /homenizer/view/login/login/login.fxml
login-window-name = Login
login-modality = APPLICATION_MODAL
login-resizable = false
Java:
@Override
public void start(Stage primaryStage) throws IOException {
try {
ViewFactory.createView(homenizer.view.application.Application.class);
ViewFactory.createView(Login.class);
} catch (InstantiationException | IllegalAccessException ex) {
Logger.getLogger(HomenizerApp.class.getName()).log(Level.SEVERE, null, ex);
Was meint ihr dazu?Was könnte man noch besser machen, oder was würdet ihr noch anders machen?
-GhostfaceChilla-
Zuletzt bearbeitet: