samedi 6 juin 2015

"Framework" zur View Ersellung

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.

Java Code:

  1. public class Login extends View{ }

Es muss immer eine Klasse existieren, die den selben Namen trägt, wie die FXML Datei und von der Klasse View abstammt

Java Code:

  1. /**
  2.  * Diese Klasse dient dazu, das laden der FXML und das erstellen der passenden
  3.  * View zu automatisieren.
  4.  *
  5.  * @author Christian
  6.  */
  7. public abstract class View {
  8.  
  9. private String fxmlName;
  10. private String windowName;
  11. private String modality;
  12. private boolean resizable;
  13.  
  14. private static final String propertiesURL = "src/homenizer/view/view.properties";
  15.  
  16.  
  17. protected View() {
  18. try {
  19. loadProperties();
  20. init();
  21. } catch (Exception ex) {
  22. Logger.getLogger(View.class.getName()).log(Level.SEVERE, null, ex);
  23. }
  24. }
  25.  
  26. private boolean wrapStringToBoolean(String prop) throws Exception{
  27. switch (prop) {
  28. case "true":
  29. return true;
  30. case "false":
  31. return false;
  32. }
  33. return true;
  34. }
  35.  
  36. private void init() throws IOException{
  37. Parent root = FXMLLoader.load(getClass().getResource(fxmlName));
  38. Scene scene = new Scene(root);
  39. Stage stage = new Stage();
  40. stage.setScene(scene);
  41. stage.setTitle(windowName);
  42. stage.setResizable(resizable);
  43. stage.initModality(Modality.valueOf(modality));
  44. stage.show();
  45.  
  46.  
  47. }
  48.  
  49. /**
  50.   * Diese Methode liest die Eigenschaften fxm-name , window-name, modality
  51.   * in die entsprechenden Variablen.
  52.   * @throws FileNotFoundException
  53.   * @throws IOException
  54.   */
  55. private void loadProperties() throws FileNotFoundException, IOException, Exception{
  56. FileInputStream fis = new FileInputStream(new File(propertiesURL));
  57. Properties prop = new Properties();
  58. prop.load(fis);
  59. String prefix = getClass().getSimpleName().toLowerCase(); //Erfragen
  60. //des Namens der Klasse
  61. fxmlName = prop.getProperty(prefix+"-fxml-name");
  62. windowName = prop.getProperty(prefix+"-window-name");
  63. modality = prop.getProperty(prefix+"-modality");
  64. resizable = wrapStringToBoolean(prop.getProperty(prefix+"-resizable"));
  65. }
  66.  
  67. }

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.


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

Und so könnte die .properties Datei aussehen

Java Code:

  1. @Override
  2. public void start(Stage primaryStage) throws IOException {
  3. try {
  4. ViewFactory.createView(homenizer.view.application.Application.class);
  5. ViewFactory.createView(Login.class);
  6. Logger.getLogger(HomenizerApp.class.getName()).log(Level.SEVERE, null, ex);

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-


"Framework" zur View Ersellung

0 commentaires:

Enregistrer un commentaire