Віджети — це, по суті, контейнерні компоненти рендера, які можна додавати на екран і з якими гравець може взаємодіяти за допомогою різних подій, таких як натискання миші, клавіш тощо.
Створення віджету
Є кілька способів створити клас віджетів, наприклад розширити AbstractWidget. Цей клас надає багато корисних утиліт, таких як керування шириною, висотою, позицією та обробка подій — він реалізує інтерфейси Renderable, GuiEventListener, NarrationSupplier і NarratableEntry:
Renderable— для рендера — потрібен для реєстрації віджета на екрані за допомогою методуaddRenderableWidget.GuiEventListener— для подій — обов’язковий, якщо ви хочете обробляти такі події, як натискання мишею, натискання клавіш тощо.NarrationSupplier— для доступності — необхідний, щоб зробити ваш віджет доступним для програм зчитування з екрана та інших інструментів доступності.NarratableEntry– для вибору – обов’язковий, якщо ви хочете зробити свій віджет доступним для вибору за допомогою клавіші Tab – це також сприяє доступності.
java
public class CustomWidget extends AbstractWidget {
public CustomWidget(int x, int y, int width, int height) {
super(x, y, width, height, Component.empty());
}
@Override
protected void renderWidget(GuiGraphics graphics, 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
graphics.fillGradient(getX(), getY(), getX() + this.width, getY() + this.height, startColor, endColor);
}
@Override
protected void updateWidgetNarration(NarrationElementOutput 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;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Додавання віджету до екрана
Як і всі віджети, вам потрібно додати його на екран за допомогою методу addRenderableWidget, який надається класом Screen. Переконайтеся, що ви робите це в методі init.
java
// Add a custom widget to the screen.
// x, y, width, height
CustomWidget customWidget = new CustomWidget(40, 80, 120, 20);
this.addRenderableWidget(customWidget);1
2
3
4
2
3
4

Події віджету
Ви можете обробляти такі події, як натискання мишею, натискання клавіш, перевизначаючи mouseClicked, afterMouseAction, keyPressed та інші методи.
Наприклад, ви можете змусити віджет змінювати колір, коли на нього наводите курсор, використовуючи метод isHovered(), наданий класом AbstractWidget:
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
}1
2
3
4
5
6
2
3
4
5
6


