Skip to content

Controller.dialog (Dialogfenster)1

DialogLauncher

Import

Das statische Attribut dialog() der Klasse Controller kann über einen statischen Import eingebunden werden:

import static pi.Controller.dialog();

Alle Dialog-Fenster drängen sich kompromisslos in den Vordergrund und die entsprechende Methode endet erst dann, wenn das Fenster wieder geschlossen wird.

public class AllDialogsDemo extends Scene
{
    Text result;

    public AllDialogsDemo()
    {
        result = new Text("Ergebnis");
        result.anchor(0, 6);
        result.color("red");
        add(result);

        int x = -12;

        int y1 = 3;
        int y2 = 2;

        int y3 = -2;
        int y4 = -3;

        // showMessage

        new DialogOpener("showMessage(message)", () -> {
            Controller.dialog().showMessage("Message");
            return null;
        }, x, y1);

        new DialogOpener("showMessage(message, title)", () -> {
            Controller.dialog().showMessage("Message", "Title");
            return null;
        }, x, y2);

        // requestStringInput

        new DialogOpener("requestStringInput(message)",
                () -> Controller.dialog().requestStringInput("Message"), x, y3);

        new DialogOpener("requestStringInput(message, title)",
                () -> Controller.dialog()
                    .requestStringInput("Message", "Title"),
                x, y4);

        // requestYesNo

        x = 2;

        new DialogOpener("requestYesNo(message)",
                () -> Controller.dialog().requestYesNo("Message"), x, y1);

        new DialogOpener("requestYesNo(message, title)",
                () -> Controller.dialog().requestYesNo("Message", "Title"), x,
                y2);

        // requestOkCancel

        new DialogOpener("requestOkCancel(message)",
                () -> Controller.dialog().requestOkCancel("Message"), x, y3);

        new DialogOpener("requestYesNo(message, title)",
                () -> Controller.dialog().requestOkCancel("Message", "Title"),
                x, y4);
    }

    class DialogOpener extends Text implements MouseClickListener, FrameListener
    {
        Supplier<Object> supplier;

        public DialogOpener(String content, Supplier<Object> supplier, double x,
                double y)
        {
            super(content);
            this.supplier = supplier;
            add(this);
            anchor(x, y);
        }

        @Override
        public void onMouseDown(Vector position, MouseButton button)
        {
            if (contains(position))
            {
                result.content(supplier.get());
            }
        }

        @Override
        public void onFrame(double pastTime)
        {
            if (contains(Controller.mousePosition()))
            {
                color("blue");
            }
            else
            {
                color("white");
            }
        }
    }

    public static void main(String[] args)
    {
        Controller.instantMode(false);
        Controller.start(new AllDialogsDemo());
    }
}
Zum Java-Code: demos//home/runner/work/engine-pi/engine-pi/subprojects/demos/src/main/java/demos/docs/main_classes/controller/AllDialogsDemo.java


  1. Der Abschnitt stammt aus dem Engine-Alpha-Wiki: https://engine-alpha.org/wiki/Tutorials/Dialoge