Application.Parameters getParameters()
Metoda wyszukuje parametry dla tej aplikacji, w tym argumenty linii poleceń.
Metoda nie może być wywołana z konstruktora, gdyż wtedy zwraca null
.
Może być wywołana z metody init()
lub w na etapie późniejszym.
Obiekt Parameters
Obiekt Parameters ma trzy metody:
Map<String, String> getNamed()
List<String> getUnnamed()
List<String> getRaw()
Parametry named
(nazwane) to parametry podane jako --key=value
np. "--w=300"
. Prefiks --
oznacza parametr nazwany. Mamy więc parametr o nazwie w
, którego wartość wynosi 300
Parametry unnamed
(nie nazwane) to parametry podane bez prefiksu --
np. "Ula"
albo "300"
albo "w=300"
. W tym przypadku "w=300"
to po prostu ciąg znaków.
Parametry raw
(surowe) to parametry dokładnie w tej formie w jakiej zostały podane.
Każda z powyższych kolekcji może być pusta, ale nigdy nie jest null
.
Klasa Parameters1
Ściągnij klasę Parameters1.zip
Klasa przyjmuje cztery parametry, z których dwa pierwsze są parametrami nazwanymi.
package application; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import java.util.List; import java.util.Map; import java.util.Set; public class Parameters1 extends Application { public static void main(String[] args) { Application.launch( "--w=300", "--h=200", "400", "Aria"); } @Override public void init(){} @Override public void start(Stage stage) { try { Parameters params = this.getParameters(); //----------------- Map<String, String> nParams = params.getNamed(); System.out.println("nParams: "); Set<Map.Entry<String, String>> set = nParams.entrySet(); for(Map.Entry<String, String> entry : set){ System.out.println(entry.getKey() + " " + entry.getValue()); } //----------------- List<String> unParams = params.getUnnamed(); System.out.println("unParams: "); for(String b: unParams){ System.out.println(b); } //----------------- List<String> rParams = params.getRaw(); System.out.println("rParams: "); for(String c: rParams){ System.out.println(c); } //----------------- StackPane root = new StackPane(); Scene scene = new Scene(root, 300, 200); stage.setScene(scene); stage.setTitle(this.getClass().getName()); stage.setOnCloseRequest(e -> Platform.exit()); stage.show(); } catch (Exception e) { e.printStackTrace(); } } @Override public void stop(){} }
Po uruchomieniu klasy zobaczymy:
nParams: w 300 h 200 unParams: 400 Aria rParams: --w=300 --h=200 400 Aria
Klasa Parameters2
Ściągnij klasę Parameters2.zip
Klasa pokazuje jak odczytać i użyć w aplikacji parametry unnamed
package application; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import java.util.List; public class Parameters2 extends Application { public static void main(String[] args) { Application.launch("300", "200"); } @Override public void init(){} @Override public void start(Stage stage) { try { Parameters params = this.getParameters(); List<String> unParams = params.getUnnamed(); int w = Integer.parseInt(unParams.get(0)); int h= Integer.parseInt(unParams.get(1)); StackPane root = new StackPane(); Scene scene = new Scene(root, w, h); stage.setScene(scene); stage.setTitle(this.getClass().getName()); stage.setOnCloseRequest(e -> Platform.exit()); stage.show(); } catch (Exception e) { e.printStackTrace(); } } @Override public void stop(){} }
Po uruchomieniu klasy okno przyjmie podane wymiary.
Klasa Parameters3
Ściągnij klasę Parameters3.zip
Klasa pokazuje jak odczytać i użyć w aplikacji parametry named
package application; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import java.util.Map; public class Parameters3 extends Application { public static void main(String[] args) { Application.launch("--w=300", "--h=200"); } @Override public void init(){} @Override public void start(Stage stage) { try { Parameters params = this.getParameters(); Map<String, String> nParams = params.getNamed(); int w = Integer.parseInt(nParams.get("w")); int h= Integer.parseInt(nParams.get("h")); StackPane root = new StackPane(); Scene scene = new Scene(root, w, h); stage.setScene(scene); stage.setTitle(this.getClass().getName()); stage.setOnCloseRequest(e -> Platform.exit()); stage.show(); } catch (Exception e) { e.printStackTrace(); } } @Override public void stop(){} }
Po uruchomieniu klasy okno przyjmie podane wymiary.
Klasa Parameters4
Ściągnij klasę Parameters4.zip
Klasa pokazuje jak zabezpieczyć się na wypadek, gdyby parametry uruchomieniowe nie zostały podane. Okno ma nadane wymiary domyślne, które zostaną zmienione na wymiary ewentualnie podane w parametrach.
package application; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import java.util.Map; public class Parameters4 extends Application { private int w = 200; private int h = 100; public static void main(String[] args) { Application.launch("--w=300", "--h=200"); } @Override public void init(){ Parameters params = this.getParameters(); Map<String, String> nParams = params.getNamed(); if(nParams.containsKey("w")) { w = Integer.parseInt(nParams.get("w")); } if(nParams.containsKey("h")) { h = Integer.parseInt(nParams.get("h")); } } @Override public void start(Stage stage) { try { StackPane root = new StackPane(); Scene scene = new Scene(root, w, h); stage.setScene(scene); stage.setTitle(this.getClass().getName()); stage.setOnCloseRequest(e -> Platform.exit()); stage.show(); } catch (Exception e) { e.printStackTrace(); } } @Override public void stop(){} }
Po uruchomieniu klasy okno przyjmuje wymiary podane jako parametr.