Plugin-Erstellung/Java/UIElement Klasse

Aus Rising World Wiki


UIElement Klasse ist die Basisklasse für sämtliche UI-Elemente der Java Plugin-API. Ein UIElement kann als Container, Button, Panel und für weitere Zwecke eingesetzt werden. Andere UI-Elemente (wie Textfelder oder Labels) sind von dieser Klasse abgeleitet.
Die Klasse UIElement erbt von java.lang.Object und wird mit dem Unity UI Toolkit (UITK) gerendert. Die visuellen Eigenschaften werden über ein Style-Objekt beschrieben.
Dieser Artikel dokumentiert einige wichtige Methoden der UIElement Klasse und zeigt anhand ausgewählter Java-Beispiele, wie diese zu verwenden sind. Hier sind nicht alle Methoden aufgeführt. Die vollständige API-Dokumentation mit allen Methoden, Feldern und Konstruktoren ist im JavaDoc zu finden.


Dokumentation

Die Klasse UIElement ist unter JavaDoc: Class UIElement zu finden. Die vollständige API-Dokumentation mit allen Klassen, Methoden, Feldern und Konstruktoren ist im JavaDoc zu finden.

Java Paket

In der Java Plugin-API bezeichnet der Begriff "Package" (Paket) eine Gruppierung von zusammengehörigen Klassen, Interfaces und anderen Paketen. Die UIElement Klasse befindet sich im Package net.risingworld.api.ui.

Subklassen

Die Klasse UIElement ist die Basisklasse für sämtliche UI-Elemente. Aus dem JavaDoc geht hervor, dass unter anderem folgende Klassen direkt von UIElement abgeleitet sind:

  • UILabel – Text-Label
  • UIMesh – Mesh-Element. Es ermöglicht benutzerdefinierte Formen und Elemente auf dem Bildschirm zu erstellen.
  • UIPainter2D – 2D-Zeichenoberfläche
  • UIScrollView – scrollbarer Container
  • UITextField – einzeiliges Textfeld

Beispiel addChild

Erstellt ein Label (als Kind-Element) innerhalb eines Panels (Eltern-Element). Über die Methode addChild() lässt sich ein UIElement einem anderen Element als Kind zuordnen. Position und Style des Kindes richten sich dann nach dem neuen Eltern-Element. Änderungen am Eltern-Element (etwa Verschieben, Größe ändern, Sichtbarkeit) wirken sich automatisch auf alle Kinder aus.

//Den "Eltern"-Bereich erzeugen
UIElement panel = new UIElement();
panel.setPosition(100, 500, false);
panel.setSize(400, 300, false);

//Farbe ändern (transparentes Grau)
panel.setBackgroundColor(0.5f, 0.5f, 0.5f, 0.5f);

//Panel zur Spieler-UI hinzufügen (nur für das Eltern-Element notwendig!)
player.addUIElement(panel);

//Nun ein Label genau in der Mitte des Panels erzeugen
//Da das Label ein Kind-Element ist, ist die Position relativ zum Eltern-Element!
UILabel label = new UILabel("Ich bin ein Kind-Element!");
label.setPosition(50, 50, true);

//"Pivot" auf "Mitte" setzen
label.setPivot(Pivot.MiddleCenter);

//Zum Beispiel die Schriftgröße ändern
label.setFontSize(42);

//Label als Kind-Element zum "panel"-Eltern-Element hinzufügen
panel.addChild(label);

Die Methode addChild() mit Codeschnipsel ist unter javadoc RW: Class UIElement - addChild(UIElement) zu finden.

Beispiel onClick

Überschreibt die onClick()-Methode direkt bei der Initialisierung über eine anonyme Klasse. Wenn ein Spieler auf das Label klickt, werden sowohl das PlayerUIElementClickEvent-Event als auch die onClick()-Methode ausgelöst. Über setClickable(true) wird das Element als klickbar markiert.

//Ein Label als "anonyme Klasse" erzeugen, also die onClick()-Methode
//während der Initialisierung überschreiben. Klickt der Spieler auf das Label,
//werden sowohl das "PlayerUIElementClickEvent" als auch die onClick()-Methode aufgerufen
UILabel label = new UILabel("Klick mich!"){
    @Override
    public void onClick(PlayerUIElementClickEvent event)
    {
        //Etwas tun, zum Beispiel eine Chatnachricht senden
        event.getPlayer().sendTextMessage("Du hast auf ein Label geklickt!");

        //Das Label aus der Spieler-UI entfernen, falls gewünscht
        //Da wir uns "innerhalb" der UILabel-Klasse befinden, bezieht sich "this" auf die konkrete Label-Instanz
        event.getPlayer().removeUIElement(this);
    }
};

//Position und Größe des Labels setzen
label.setPosition(50, 50, true);
label.setSize(100, 50, false);

//Label als klickbar markieren
label.setClickable(true);

//Label nicht vergessen, zur Spieler-UI hinzuzufügen
player.addUIElement(label);

Die Methode onClick() mit Codeschnipsel ist unter javadoc RW: Class UIElement - onClick(PlayerUIElementClickEvent) zu finden.

Wichtige Methoden in diesem Beispiel

Beispiel setFontSize

Erzeugt ein Label in der oberen Bildschirmmitte und legt Schriftart, Schriftgröße sowie Schriftfarbe fest. Die Methode setFontSize() wird auf der Subklasse UILabel aufgerufen.

//Label mit dem Text "Hello World" erzeugen
UILabel label = new UILabel("Hello World");

//Wir möchten den Text zentriert darstellen
label.setTextAlign(TextAnchor.MiddleCenter);

//Eine Schriftart, Schriftgröße und Schriftfarbe festlegen
label.setFont(Font.Medieval);
label.setFontSize(64f);
label.setFontColor(0xFFFFFFFF);

//Optional eine Hintergrundfarbe setzen
label.setBackgroundColor(0x000000FF);

//Das UI-Element zum Spieler hinzufügen
player.addUIElement(label);

Die Methode setFontSize() mit Codeschnipsel ist unter javadoc RW: Class UILabel - setFontSize(float) zu finden.

Java Override Annotation

Mit der Java @Override Annotation können wir dem Compiler mitteilen, dass wir absichtlich die Methode der UIElement-Oberklasse (in diesem Fall onClick()) überschreiben wollen.

Siehe auch

API Dokumentation

Forum

Kategorien

Tutorial Kategorien
Plugin-API(1 K, 11 S)
Tutorial(5 S)
Plugin-Erstellung
Java(2 K, 8 S)
Unity(6 S)