繁體中文
GitHub
主題

Java 的桌面 UI

用 Java 寫桌面應用程式,像素自己畫。

Limn 自己畫出每一個像素。元件、版面、文字、圖表、媒體與 3D 視埠,只要一個相依套件,沒有 Swing,沒有 JavaFX,底下也沒有原生工具組。

JDK 17 · Windows、macOS、Linux · Apache-2.0

本次建置期間由 Limn 繪製的示範應用程式。
本次建置期間由 Limn 繪製的示範應用程式。
本次建置期間由 Limn 繪製的示範應用程式。

立刻試試

陳列和主題編輯器,直接來自 Maven Central:沒有什麼要複製,也沒有什麼要裝,除了 jbang;你要是沒有 JDK,它連 JDK 一起取來。下載的是工具組、字型,以及這台機器的原生程式庫,另外五個平台的不會下載。

-XstartOnFirstThread 只有 macOS 認得,別的系統上的 JVM 收到它會拒絕啟動。別名跑的是最新發行版;想固定某個版本,就寫座標:jbang io.github.limn-toolkit:limn-demo:0.7.0。沒有網路時,展示程式也是附在每次發行裡的一個檔案

jbang --java-options=-XstartOnFirstThread demo@limn-toolkit/limn-toolkit  # 陳列
jbang --java-options=-XstartOnFirstThread theme-editor@limn-toolkit/limn-toolkit  # 主題編輯器
jbang demo@limn-toolkit/limn-toolkit  # 陳列
jbang theme-editor@limn-toolkit/limn-toolkit  # 主題編輯器
jbang demo@limn-toolkit/limn-toolkit  # 陳列
jbang theme-editor@limn-toolkit/limn-toolkit  # 主題編輯器

五分鐘

一個相依套件和一個 main 方法

沒有標記語言,沒有註解處理器,沒有建置外掛。加上後端,它會把工具組一起帶來,寫普通的 Java,你就有了一個視窗。

閱讀安裝指南
build.gradle.kts
dependencies {
    implementation("io.github.limn-toolkit:limn-backend-lwjgl:0.7.0")
}
Main.java
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();
    }
}

你會得到什麼

一套不必自己做的元件

按鈕、輸入欄、清單、分頁、選單、對話框、分割窗格、選色器,長條圖、折線圖與環圈圖,還有一個虛擬化清單,其中一百萬列的成本與二十列相同。每一個都從主題讀取顏色、形狀與密度,所以沒有寫死的值,緊湊模式只要一行。

查看全部
Button
Button
ComboBox
ComboBox
Slider
Slider
SegmentedControl
SegmentedControl
Checkbox and switch
Checkbox and switch
Spinner
Spinner

裝得進腦袋的版面

四個元件加一個標記:欄往下堆疊,列往旁鋪開,堆疊層層相覆,內距往內縮,Expanded 決定誰拿走剩下的空間。整套語彙就這些。沒有約束求解器要設定,也沒有版面管理員要安裝。

閱讀版面指南
A window laid out with Limn
A window laid out with Limn
由一欄、一列、一個分割與一個 Expanded 組成的視窗。

不需要框架的表單

欄位就是元件,驗證規則就是監聽器,送出就是一次方法呼叫。沒有要繫結的,也沒有要註冊的;使用者一改正,驗證狀態就把欄位的顏色換回來。

閱讀表單指南
A form built with Limn
A form built with Limn
標籤、驗證、一個選項與動作列。

影片與 3D 同樣是元件

基於物理的 3D 視埠與影片播放器,像一般元件那樣參與合成:捲動視圖會裁切它們,堆疊會畫在它們上面,它們參與版面的方式和一個標籤沒有兩樣。

閱讀媒體指南
The Limn 3D viewport
The Limn 3D viewport
合成進一般視窗中的 3D 視埠。

用你的使用者的語言

文字以繪製時相同的前進量來量測,字型遞補逐字元進行,所以拉丁文、希臘文、西里爾文與中日韓文可以混在同一個字串裡,而你不必挑字體。輸入法在欄位內完成組字,編輯以字素叢集為單位移動,因此組合符號與多段式表情永遠不會被切開。由右至左也不只是塑形:方向是子樹繼承的一條軸,所以希伯來語視窗會鏡像——其中仍可以放一塊由左至右的程式碼面板。

閱讀文字指南
同一個介面分別用日語、簡體中文、韓語與俄語擷取,拼接成一個視窗。
同一個介面分別用日語、簡體中文、韓語與俄語擷取,拼接成一個視窗。
同一個畫面,在本次建置中以四種語言擷取。

是你的產品氣質,不是工具包的

你的應用該像你的產品,而不像它所依賴的那個函式庫。主題就是純資料(每一種顏色、圓角半徑、每個控件繼承的尺寸級距),執行時一次呼叫即可整套替換。品牌字體從你自己掌握的檔案載入,工具包自帶的觀感一點都不會留下。

主題是怎麼運作的
同一個控件密集的介面並排渲染七次,每一條都用不同的配色、尺寸級距與字體。
同一個介面,七套主題。每一條背後的程式碼完全相同。

在你投入之前

Limn 做不到的事

任何工具組都有取捨。這些就是取捨,先講清楚,因為到第三週才發現,比現在讀到糟糕得多。

  • 僅橫排文字

    阿拉伯文、希伯來文、天城文與泰文在任何繪製文字的地方都會正確塑形,版面沿一條可繼承的由右至左軸鏡像,數字、排序與大小寫都跟著語言走——ar 與 he 的翻譯照常發布,每種文字都配有粗體。這裡沒有的是直排:沒有由上而下的欄,也沒有貫穿版面的第二條軸。行會斷開,但不做左右對齊。

  • 沒有螢幕閱讀器橋接

    鍵盤導覽與焦點框是完整的,但沒有向平台的無障礙 API 公開任何內容。若螢幕閱讀器必須可用,這個工具組目前還不適合那樣的應用程式。

  • 1.0 之前

    API 在各版本之間仍會變動,而 OpenGL 是唯一的繪製路徑。請鎖定版本並閱讀發行說明。

五分鐘,讓視窗出現在畫面上

安裝指南以一個跑得起來的程式收尾。之後的一切,就是指南、元件展示與 API 參考。