JavaFX z Arią - powrót do strony głównej

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.