日本語
GitHub
テーマ

Java のデスクトップ UI

Java のデスクトップアプリを、ゼロから描く。

Limn はピクセルを自分で描きます。ウィジェット、レイアウト、テキスト、チャート、メディア、3D ビューポートが依存 1 つで手に入り、Swing も JavaFX も、下敷きになるネイティブツールキットもありません。

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

このビルド中に Limn が描画したデモアプリケーション。
このビルド中に Limn が描画したデモアプリケーション。
このビルド中に Limn が描画したデモアプリケーション。

今すぐ試す

キッチンシンクとテーマエディタを、Maven Central からそのまま。クローンするものはなく、入れるものも jbang だけです。JDK がなければ、それも取ってきます。ダウンロードされるのはツールキットとフォント、そしてこのマシンのネイティブライブラリだけで、ほかの 5 つのプラットフォームの分は来ません。

-XstartOnFirstThread は macOS 専用で、ほかの OS の JVM は受け取ると起動を拒みます。エイリアスは最新リリースを起動します。バージョンを固定するには座標を書いてください: jbang io.github.limn-toolkit:limn-demo:0.7.0。ネットワークがなければ、デモはリリースごとに添付された 1 ファイルとしても手に入ります。

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  # テーマエディタ

5 分

依存 1 つと 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();
    }
}

手に入るもの

自分で作らなくていいコンポーネント一式

ボタン、入力欄、リスト、タブ、メニュー、ダイアログ、分割ペイン、カラーピッカー、棒・折れ線・ドーナツのチャート、そして 100 万行でも 20 行と同じコストで済む仮想化リスト。どれも色・形・密度をテーマから読むので、ハードコードされた値はなく、コンパクトモードは 1 行です。

すべて見る
Button
Button
ComboBox
ComboBox
Slider
Slider
SegmentedControl
SegmentedControl
Checkbox and switch
Checkbox and switch
Spinner
Spinner

頭に収まるレイアウト

ウィジェット 4 つとマーカー 1 つ。列は積み、行は並べ、スタックは重ね、パディングは内側に寄せ、Expanded が残りの空間を誰が取るかを決めます。語彙はこれだけで、設定すべき制約ソルバーも、導入すべきレイアウトマネージャーもありません。

レイアウトガイドを読む
A window laid out with Limn
A window laid out with Limn
列、行、分割、そして Expanded 1 つで組んだウィンドウ。

フレームワークのないフォーム

入力欄はウィジェット、検証ルールはリスナー、送信はメソッド呼び出しです。バインドするものも登録するものもなく、ユーザーが直したその瞬間に入力欄の色が戻ります。

フォームガイドを読む
A form built with Limn
A form built with Limn
ラベル、検証、選択、そしてアクション行。

動画も 3D もウィジェット

物理ベースの 3D ビューポートと動画プレーヤーが、普通のウィジェットとして合成されます。スクロールビューが切り取り、スタックが上に描き、ラベルと同じようにレイアウトに参加します。

メディアガイドを読む
The Limn 3D viewport
The Limn 3D viewport
普通のウィンドウに合成された 3D ビューポート。

ユーザーの言語で

テキストは描画に使うのと同じ送り幅で測られ、フォントフォールバックは 1 文字ずつ働きます。だからラテン、ギリシャ、キリル、CJK が 1 つの文字列に混ざっても書体を選ぶ必要がありません。入力メソッドは入力欄の中で変換し、編集は書記素クラスタ単位で動くので、結合記号や複数コードポイントの絵文字が途中で切れることはありません。右から左は整形だけではありません。方向はサブツリーが継承する軸なので、ヘブライ語のウィンドウは鏡像になり——その中に左から右のコードペインを置くこともできます。

テキストのガイドを読む
同じ画面を日本語・簡体中国語・韓国語・ロシア語で撮影し、一つの窓に継ぎ合わせたもの。
同じ画面を日本語・簡体中国語・韓国語・ロシア語で撮影し、一つの窓に継ぎ合わせたもの。
このビルド中に 4 言語で撮った、同じ画面。

あなたの製品の見た目に、ツールキットの見た目を持ち込まない

アプリケーションは、それを作ったライブラリではなく、あなたの製品らしく見えるべきです。テーマは単なるデータ(すべての色、角の丸み、各コントロールが継承するサイズ段階)で、実行中に一度の呼び出しで差し替わります。ブランドの書体は自分の管理下のファイルから読み込めるので、ツールキット由来の見た目は何も残りません。

テーマの仕組み
コントロールが密に並ぶ同じ画面を七回横並びに描画したもの。帯ごとにパレット、サイズ段階、書体が異なります。
一つの画面、七つのテーマ。どの帯も背後のコードは同一です。

採用を決める前に

Limn にできないこと

どんなツールキットにも引き換えにするものがあります。3 週目に気づくより今読むほうがよいので、最初に書いておきます。

  • 横書きのみ

    アラビア文字、ヘブライ文字、デーヴァナーガリー、タイ文字はテキストが描かれるところならどこでも整形され、レイアウトは継承される右から左の軸で鏡像化され、数字も並び順も大文字小文字も言語に従います——ar と he の翻訳を配布し、各文字体系に Bold もあります。ここに無いのは縦書きです。上から下へ流れる段組みも、レイアウトを貫く第二の軸もありません。行は折り返しますが、両端揃えはしません。

  • スクリーンリーダーへの橋渡しなし

    キーボード操作とフォーカスリングは完成していますが、プラットフォームのアクセシビリティ API には何も公開していません。スクリーンリーダー対応が必須のアプリケーションには、まだ向いていません。

  • 1.0 より前

    API はリリース間でまだ動きますし、描画経路は OpenGL だけです。バージョンを固定して、リリースノートを読んでください。

5 分で画面にウィンドウを

インストールガイドは動くプログラムで終わります。その先はガイドと、コンポーネントギャラリーと、API リファレンスです。