一套不必自己造的组件
按钮、输入框、列表、标签页、菜单、对话框、分栏、取色器,柱状图、折线图与环形图,还有一个虚拟化列表,其中一百万行的开销与二十行相同。每一个都从主题读取颜色、形状与密度,所以没有写死的值,紧凑模式只要一行。
查看全部



















Java 的桌面 UI
Limn 自己绘制每一个像素。组件、布局、文本、图表、媒体与 3D 视口,只需一个依赖,没有 Swing,没有 JavaFX,底下也没有原生工具包。


陈列和主题编辑器,直接来自 Maven Central:没有什么要克隆,也没有什么要装,除了 jbang;你要是没有 JDK,它连 JDK 一起取来。下载的是工具包、字体,以及这台机器的原生库,另外五个平台的不会下载。
-XstartOnFirstThread 只有 macOS 认,别的系统上的 JVM 收到它会拒绝启动。别名运行的是最新发布版;想固定某个版本,就写坐标:jbang io.github.limn-toolkit:limn-demo:0.7.0。没有网络时,演示程序也是附在每次发布里的一个文件。
jbang --java-options=-XstartOnFirstThread demo-toolkit/limn-toolkit # 陈列
jbang --java-options=-XstartOnFirstThread theme-editor-toolkit/limn-toolkit # 主题编辑器jbang demo-toolkit/limn-toolkit # 陈列
jbang theme-editor-toolkit/limn-toolkit # 主题编辑器jbang demo-toolkit/limn-toolkit # 陈列
jbang theme-editor-toolkit/limn-toolkit # 主题编辑器五分钟
没有标记语言,没有注解处理器,没有构建插件。加上后端,它会把工具包一起带来,写普通的 Java,你就有了一个窗口。
阅读安装指南dependencies {
implementation("io.github.limn-toolkit:limn-backend-lwjgl:0.7.0")
}public static void main(String[] args) {
// macOS needs -XstartOnFirstThread on the JVM command line; it is macOS-only and a
// JVM elsewhere given it will not start.
try (Backend backend = new LwjglBackend()) {
NativeWindow window = backend.createWindow(
new WindowConfig("Hello, Limn", 480, 320, true, true));
Column column = new Column();
column.gap(12);
column.add(new Label("A window, drawn by Limn."));
column.add(new Button("Close").onAction(window::requestClose));
Scene scene = new Scene(new Padding(Insets.all(24), column));
scene.bind(window);
backend.runEventLoop();
}
}你会得到什么
按钮、输入框、列表、标签页、菜单、对话框、分栏、取色器,柱状图、折线图与环形图,还有一个虚拟化列表,其中一百万行的开销与二十行相同。每一个都从主题读取颜色、形状与密度,所以没有写死的值,紧凑模式只要一行。
查看全部











四个组件加一个标记:列纵向堆叠,行横向铺开,栈层层叠加,内边距向内收,Expanded 决定谁占据剩下的空间。整套词汇就这些。没有约束求解器要配置,也没有布局管理器要安装。
阅读布局指南





文本用与绘制相同的步进量来度量,字体回退逐字符进行,所以拉丁文、希腊文、西里尔文和中日韩文可以混在同一个字符串里,而你无需选择字体。输入法在字段内完成组字,编辑按字素簇移动,因此组合符号和多段式表情永远不会被切开。从右向左也不只是塑形:方向是子树继承的一条轴,所以希伯来语窗口会镜像——其中仍可以放一块从左向右的代码面板。
阅读文本指南

你的应用该像你的产品,而不像它所依赖的那个库。主题就是纯数据(每一种颜色、圆角半径、每个控件继承的尺寸档位),运行时一次调用即可整套替换。品牌字体从你自己掌握的文件加载,工具包自带的观感一点都不会留下。
主题是怎么工作的
在你投入之前
任何工具包都有取舍。这些就是取舍,先说清楚,因为到第三周才发现,比现在读到要糟糕得多。
阿拉伯文、希伯来文、天城文与泰文在任何绘制文字的地方都会正确塑形,版面沿一条可继承的从右向左轴镜像,数字、排序与大小写都跟随语言——ar 与 he 的翻译照常发布,每种文字都配有粗体。这里没有的是竖排:没有自上而下的栏,也没有贯穿布局的第二条轴。行会折断,但不做两端对齐。
键盘导航与焦点环是完整的,但没有向平台的无障碍 API 暴露任何内容。如果屏幕阅读器必须可用,这个工具包目前还不适合那样的应用。
API 在版本之间仍会变动,而 OpenGL 是唯一的渲染路径。请锁定版本并阅读发行说明。
安装指南以一个能跑起来的程序收尾。此后的一切,就是指南、组件画廊和 API 参考。