Skip to content

Eigene Widgets

Widgets sind im Wesentlichen in Containern untergebrachte Rendering-Komponenten, die zu einem Bildschirm hinzugefügt werden können und mit denen der Spieler durch verschiedene Ereignisse wie Mausklicks, Tastendruck usw.

Ein Widget erstellen

Es gibt mehrere Möglichkeiten, eine Widget-Klasse zu erstellen, beispielsweise durch die Erweiterung von ClickableWidget. Diese Klasse bietet viele nützliche Funktionen, wie beispielsweise die Verwaltung von Breite, Höhe und Position sowie die Behandlung von Ereignissen.

  • Drawable - zum Rendern - Erforderlich, um das Widget über die Methode addDrawableChild auf dem Bildschirm zu registrieren.
  • Element - für Ereignisse - Erforderlich, wenn du Ereignisse wie Mausklicks, Tastendrücke usw.
  • Narratable - für die Barrierefreiheit - Erforderlich, um dein Widget für Bildschirmleser und andere Barrierefreiheitstools zugänglich zu machen.
  • Selectable - für die Auswahl - Erforderlich, wenn du dein Widget mit der Tab-Taste auswählbar machen willst - dies hilft auch bei der Barrierefreiheit.
java
public class CustomWidget extends ClickableWidget {
	public CustomWidget(int x, int y, int width, int height) {
		super(x, y, width, height, Text.empty());
	}

	@Override
	protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
		// We'll just draw a simple rectangle for now.
		// x1, y1, x2, y2, startColor, endColor
		int startColor = 0xFF00FF00; // Green
		int endColor = 0xFF0000FF; // Blue

		context.fillGradient(getX(), getY(), getX() + this.width, getY() + this.height, startColor, endColor);
	}

	@Override
	protected void appendClickableNarrations(NarrationMessageBuilder builder) {
		// For brevity, we'll just skip this for now - if you want to add narration to your widget, you can do so here.
		return;
	}
}

Das Widget zum Bildschirm hinzufügen

Wie alle Widgets musst du es mit der Methode addDrawableChild, die von der Klasse Screen bereitgestellt wird, zum Bildschirm hinzufügen. Stelle sicher, dass du dies in der Methode init machst.

java
public class CustomWidget extends ClickableWidget {
	public CustomWidget(int x, int y, int width, int height) {
		super(x, y, width, height, Text.empty());
	}

	@Override
	protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
		// We'll just draw a simple rectangle for now.
		// x1, y1, x2, y2, startColor, endColor
		int startColor = 0xFF00FF00; // Green
		int endColor = 0xFF0000FF; // Blue

		context.fillGradient(getX(), getY(), getX() + this.width, getY() + this.height, startColor, endColor);
	}

	@Override
	protected void appendClickableNarrations(NarrationMessageBuilder builder) {
		// For brevity, we'll just skip this for now - if you want to add narration to your widget, you can do so here.
		return;
	}
}

Ein Eignes Widget am Bildschirm.

Widget Events

Du kannst Ereignisse wie Mausklicks und Tastendrücke behandeln, indem du die Methoden onMouseClicked, onMouseReleased, onKeyPressed und andere Methoden überschreibst.

Du kannst zum Beispiel dafür sorgen, dass das Widget die Farbe wechselt, wenn man mit dem Mauszeiger darüber fährt, indem du die Methode isHovered() verwendest, die von der Klasse ClickableWidget bereitgestellt wird:

java
// This is in the "renderWidget" method, so we can check if the mouse is hovering over the widget.
if (isHovered()) {
	startColor = 0xFFFF0000; // Red
	endColor = 0xFF00FFFF; // Cyan
}

Hover-Event Beispiel