Deutsch
GitHub
Design

Desktop-UI für Java

Desktop-Anwendungen in Java, von Grund auf gezeichnet.

Limn zeichnet seine Pixel selbst. Widgets, Layout, Text, Diagramme, Medien und ein 3D-Viewport, in einer Abhängigkeit, ohne Swing, ohne JavaFX und ohne natives Toolkit darunter.

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

Die Demo-Anwendung, von Limn während dieses Builds gerendert.
Die Demo-Anwendung, von Limn während dieses Builds gerendert.
Die Demo-Anwendung, von Limn während dieses Builds gerendert.

Jetzt ausprobieren

Die Auslage und der Theme-Editor, direkt von Maven Central: nichts zu klonen, und nichts zu installieren außer jbang, das auch ein JDK holt, wenn Sie keines haben. Heruntergeladen werden das Toolkit, die Schriften und die nativen Bibliotheken dieser Maschine, nicht die der anderen fünf Plattformen.

-XstartOnFirstThread gibt es nur unter macOS, und eine JVM, die es anderswo bekommt, startet nicht. Die Aliasse starten die neueste Version; um eine festzunageln, nennen Sie die Koordinate: jbang io.github.limn-toolkit:limn-demo:0.7.0. Ohne Netz gibt es die Demo auch als eine Datei an jedem Release.

jbang --java-options=-XstartOnFirstThread demo@limn-toolkit/limn-toolkit  # die Auslage
jbang --java-options=-XstartOnFirstThread theme-editor@limn-toolkit/limn-toolkit  # der Theme-Editor
jbang demo@limn-toolkit/limn-toolkit  # die Auslage
jbang theme-editor@limn-toolkit/limn-toolkit  # der Theme-Editor
jbang demo@limn-toolkit/limn-toolkit  # die Auslage
jbang theme-editor@limn-toolkit/limn-toolkit  # der Theme-Editor

Fünf Minuten

Eine Abhängigkeit und eine main-Methode

Keine Auszeichnungssprache, kein Annotation Processor, kein Build-Plugin. Das Backend hinzufügen, das das Toolkit mitbringt, einfaches Java schreiben, und Sie haben ein Fenster.

Installationsanleitung lesen
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();
    }
}

Was Sie bekommen

Ein Komponentensatz, den Sie nicht selbst bauen müssen

Schaltflächen, Felder, Listen, Reiter, Menüs, Dialoge, geteilte Bereiche, ein Farbwähler, Balken-, Linien- und Ringdiagramme sowie eine virtualisierte Liste, in der eine Million Zeilen so viel kostet wie zwanzig. Jede davon liest Farbe, Form und Dichte aus dem Design, also ist nichts fest verdrahtet und ein kompakter Modus ist eine Zeile.

Alle ansehen
Button
Button
ComboBox
ComboBox
Slider
Slider
SegmentedControl
SegmentedControl
Checkbox and switch
Checkbox and switch
Spinner
Spinner

Layout, das in den Kopf passt

Vier Widgets und ein Marker: eine Spalte stapelt, eine Zeile verteilt, ein Stapel überlagert, Padding rückt ein, und Expanded sagt, wer den übrigen Platz bekommt. Das ist das ganze Vokabular; es gibt keinen Constraint-Solver zu konfigurieren und keinen Layout-Manager zu installieren.

Layout-Anleitung lesen
A window laid out with Limn
A window laid out with Limn
Ein Fenster aus einer Spalte, einer Zeile, einem Split und einem Expanded.

Formulare ohne Framework

Ein Feld ist ein Widget, eine Validierungsregel ist ein Listener, und Absenden ist ein Methodenaufruf. Nichts zu binden, nichts zu registrieren, und Validierungszustände, die ein Feld in dem Moment umfärben, in dem der Nutzer es korrigiert.

Formular-Anleitung lesen
A form built with Limn
A form built with Limn
Beschriftungen, Validierung, eine Auswahl und die Aktionszeile.

Video und 3D sind auch nur Widgets

Ein physikalisch basierter 3D-Viewport und ein Videoplayer, zusammengesetzt wie gewöhnliche Widgets: eine Scroll-Ansicht beschneidet sie, ein Stapel zeichnet darüber, und sie nehmen am Layout teil wie eine Beschriftung.

Medien-Anleitung lesen
The Limn 3D viewport
The Limn 3D viewport
Der 3D-Viewport, eingesetzt in ein gewöhnliches Fenster.

In den Sprachen Ihrer Nutzer

Text wird mit denselben Vorschüben gemessen, mit denen er gezeichnet wird, und der Schrift-Fallback läuft pro Zeichen, so mischen sich Latein, Griechisch, Kyrillisch und CJK in einer Zeichenkette, ohne dass Sie eine Schrift wählen. Eingabemethoden komponieren im Feld selbst, und die Bearbeitung bewegt sich in Graphem-Clustern, sodass kombinierende Zeichen und mehrteilige Emoji nie zerteilt werden. Rechts nach links ist mehr als Formung: die Richtung ist eine Achse, die ein Teilbaum erbt — ein hebräisches Fenster spiegelt sich und kann trotzdem eine links-nach-rechts gesetzte Codeansicht enthalten.

Zum Text-Leitfaden
Derselbe Bildschirm, aufgenommen auf Japanisch, vereinfachtem Chinesisch, Koreanisch und Russisch, zu einem Fenster zusammengesetzt.
Derselbe Bildschirm, aufgenommen auf Japanisch, vereinfachtem Chinesisch, Koreanisch und Russisch, zu einem Fenster zusammengesetzt.
Dieselbe Oberfläche, während dieses Builds in vier Sprachen aufgenommen.

Ihre Identität, nicht die des Toolkits

Ihre Anwendung soll nach Ihrem Produkt aussehen, nicht nach der Bibliothek, mit der sie gebaut wurde. Ein Theme sind reine Daten (jede Farbe, der Eckenradius, die Größenstufe, die jedes Steuerelement erbt), und ein Aufruf tauscht es zur Laufzeit. Laden Sie die Schrift Ihrer Marke aus einer Datei, die Ihnen gehört: vom Aussehen des Toolkits bleibt nichts übrig.

So funktioniert das Theming
Derselbe dichte Bildschirm mit Steuerelementen, siebenmal nebeneinander gerendert, jeder Streifen in einer anderen Palette, Größenstufe und Schrift.
Ein Bildschirm, sieben Themes. Der Code hinter jedem Streifen ist identisch.

Bevor Sie sich festlegen

Was Limn nicht kann

Jedes Toolkit tauscht etwas ein. Das sind die Tauschgeschäfte, vorab genannt; sie in Woche drei zu entdecken ist schlimmer, als sie jetzt zu lesen.

  • Nur horizontaler Text

    Arabisch, Hebräisch, Devanagari und Thai werden überall geformt, wo Text gezeichnet wird, das Layout spiegelt sich entlang einer vererbten Rechts-nach-links-Achse, und Ziffern, Sortierung und Groß-/Kleinschreibung folgen der Sprache — die Bündel ar und he werden ausgeliefert, mit einem Bold für jede Schrift. Was fehlt, ist vertikales Schreiben: keine Spalten von oben nach unten, keine zweite Achse durch das Layout. Zeilen brechen um; Blocksatz gibt es nicht.

  • Keine Screenreader-Brücke

    Tastaturnavigation und Fokusringe sind vollständig, aber nichts wird an die Barrierefreiheits-APIs der Plattform gemeldet. Wenn ein Screenreader funktionieren muss, ist dies für diese Anwendung noch nicht das richtige Toolkit.

  • Vor 1.0

    Die API bewegt sich zwischen Releases noch, und OpenGL ist der einzige Renderpfad. Pinnen Sie Ihre Version und lesen Sie die Release Notes.

In fünf Minuten ein Fenster auf dem Bildschirm

Die Installationsanleitung endet mit einem laufenden Programm. Alles danach ist das Handbuch, die Komponentengalerie und die API-Referenz.