从文件加载 UI
虽然通过代码创建 UI 具有更高的灵活性,但对新手而言,使用 UI 编辑器 更加直观和简单。理想的做法是通过编辑器设计 UI 布局,再通过代码绑定 UI 功能逻辑。
阅读前须知
请确保你已具备使用 UI 编辑器 创建 UI 的基本知识,并准备好用于加载的 UI 文件。
加载 UI 文件非常简单,只需几行代码。假设你有一个 UI 文件位于 .minecraft/ldlib/assets/ldlib/projects/ui/test_ui.ui。
你可以通过 UIProject.loadUIFromFile(location) 方法获取一个 creator。creator 会缓存资源以加速创建过程,对于同一项目的加载,建议将其存储起来。
Warning
如果 UI 文件无法加载,creator 可能为 null。
绑定 UI 功能逻辑
加载 UI 项目后,我们需要为其绑定功能逻辑。首先,需要获取控件的实例。LDLib 提供了两种方法来获取:
List<Widget> getWidgetsById(regex):根据正则表达式获取所有匹配的控件,并返回所有结果。Widget getFirstWidgetById(regex):根据正则表达式获取所有匹配的控件,并返回第一个结果。
Warning
不要在 UI 文件的 ResourceLocation 中包含文件扩展名!
例如 .minecraft/ldlib/assets/ldlib/projects/ui/test_ui.ui 应写为 ldlib:test_ui
public WidgetGroup createUI() {
var creator = UIProject.loadUIFromFile(new ResourceLocation("ldlib:test_ui"));
// creator 会缓存资源以加速创建过程。
// 对于同一项目的加载,你最好将其存储起来。
var root = creator.get();
var button = root.getFirstWidgetById("button_id");
if (button != null) {
button.setOnPressCallback(clickData -> {
System.out.println(clickData.isShiftClick);
});
}
return root;
}
function createUI() {
let creator = UIProject.loadUIFromFile("ldlib:test_ui");
// creator 会缓存资源以加速创建过程。
// 对于同一项目的加载,你最好将其存储起来。
let root = creator.get();
let button = root.getFirstWidgetById("button_id");
if (button != null) {
button.setOnPressCallback(clickData => {
console.log(clickData.isShiftClick);
});
}
return root;
}

