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



















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


キッチンシンクとテーマエディタを、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-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 # テーマエディタ5 分
マークアップ言語も、アノテーションプロセッサーも、ビルドプラグインもありません。ツールキットを連れてくるバックエンドを追加して素の 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();
}
}手に入るもの
ボタン、入力欄、リスト、タブ、メニュー、ダイアログ、分割ペイン、カラーピッカー、棒・折れ線・ドーナツのチャート、そして 100 万行でも 20 行と同じコストで済む仮想化リスト。どれも色・形・密度をテーマから読むので、ハードコードされた値はなく、コンパクトモードは 1 行です。
すべて見る











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

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

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

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

アプリケーションは、それを作ったライブラリではなく、あなたの製品らしく見えるべきです。テーマは単なるデータ(すべての色、角の丸み、各コントロールが継承するサイズ段階)で、実行中に一度の呼び出しで差し替わります。ブランドの書体は自分の管理下のファイルから読み込めるので、ツールキット由来の見た目は何も残りません。
テーマの仕組み
採用を決める前に
どんなツールキットにも引き換えにするものがあります。3 週目に気づくより今読むほうがよいので、最初に書いておきます。
アラビア文字、ヘブライ文字、デーヴァナーガリー、タイ文字はテキストが描かれるところならどこでも整形され、レイアウトは継承される右から左の軸で鏡像化され、数字も並び順も大文字小文字も言語に従います——ar と he の翻訳を配布し、各文字体系に Bold もあります。ここに無いのは縦書きです。上から下へ流れる段組みも、レイアウトを貫く第二の軸もありません。行は折り返しますが、両端揃えはしません。
キーボード操作とフォーカスリングは完成していますが、プラットフォームのアクセシビリティ API には何も公開していません。スクリーンリーダー対応が必須のアプリケーションには、まだ向いていません。
API はリリース間でまだ動きますし、描画経路は OpenGL だけです。バージョンを固定して、リリースノートを読んでください。
インストールガイドは動くプログラムで終わります。その先はガイドと、コンポーネントギャラリーと、API リファレンスです。