Español
GitHub
Tema

Interfaz de escritorio para Java

Aplicaciones de escritorio en Java, dibujadas desde cero.

Limn dibuja sus propios píxeles. Widgets, disposición, texto, gráficos, medios y una vista 3D, en una dependencia, sin Swing, sin JavaFX y sin ningún kit nativo por debajo.

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

La aplicación de demostración, renderizada por Limn durante esta compilación.
La aplicación de demostración, renderizada por Limn durante esta compilación.
La aplicación de demostración, renderizada por Limn durante esta compilación.

Pruébalo ahora

El escaparate y el editor de temas, directamente desde Maven Central: nada que clonar, y nada que instalar salvo jbang, que también descarga un JDK si no tienes ninguno. Lo que se descarga es el toolkit, las fuentes y las bibliotecas nativas de esta máquina, no las de las otras cinco plataformas.

-XstartOnFirstThread es solo de macOS, y una JVM que lo reciba en cualquier otro sistema se niega a arrancar. Los alias ejecutan la versión más reciente; para fijar una, nombra la coordenada: jbang io.github.limn-toolkit:limn-demo:0.7.0. Sin red, la demo también es un solo archivo adjunto a cada versión.

jbang --java-options=-XstartOnFirstThread demo@limn-toolkit/limn-toolkit  # el escaparate
jbang --java-options=-XstartOnFirstThread theme-editor@limn-toolkit/limn-toolkit  # el editor de temas
jbang demo@limn-toolkit/limn-toolkit  # el escaparate
jbang theme-editor@limn-toolkit/limn-toolkit  # el editor de temas
jbang demo@limn-toolkit/limn-toolkit  # el escaparate
jbang theme-editor@limn-toolkit/limn-toolkit  # el editor de temas

Cinco minutos

Una dependencia y un método main

Sin lenguaje de marcado, sin procesador de anotaciones, sin complemento de compilación. Añade el backend, que trae el kit consigo, escribe Java normal y ya tienes una ventana.

Leer la guía de instalación
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();
    }
}

Lo que obtienes

Un conjunto de componentes que no tienes que construir

Botones, campos, listas, pestañas, menús, diálogos, paneles divididos, un selector de color, gráficos de barras, de líneas y de anillo, y una lista virtualizada donde un millón de filas cuesta lo mismo que veinte. Cada uno lee su color, su forma y su densidad del tema, así que nada queda fijado en el código y un modo compacto es una línea.

Verlos todos
Button
Button
ComboBox
ComboBox
Slider
Slider
SegmentedControl
SegmentedControl
Checkbox and switch
Checkbox and switch
Spinner
Spinner

Una disposición que cabe en la cabeza

Cuatro widgets y un marcador: una columna apila, una fila reparte, una pila superpone, el relleno separa y Expanded dice quién se queda con el espacio sobrante. Ese es todo el vocabulario; no hay solucionador de restricciones que configurar ni gestor de disposición que instalar.

Leer la guía de disposición
A window laid out with Limn
A window laid out with Limn
Una ventana hecha de una columna, una fila, un divisor y un Expanded.

Formularios sin framework

Un campo es un widget, una regla de validación es un oyente y enviar es una llamada a un método. Nada que enlazar, nada que registrar, y estados de validación que recolorean el campo en el momento en que el usuario lo corrige.

Leer la guía de formularios
A form built with Limn
A form built with Limn
Etiquetas, validación, una elección y la fila de acciones.

El vídeo y el 3D también son widgets

Una vista 3D con materiales físicamente realistas y un reproductor de vídeo, compuestos como widgets corrientes: una vista con desplazamiento los recorta, una pila dibuja encima y ambos participan en la disposición igual que una etiqueta.

Leer la guía de medios
The Limn 3D viewport
The Limn 3D viewport
La vista 3D, compuesta en una ventana corriente.

En los idiomas de tus usuarios

El texto se mide con los mismos avances con los que se dibuja, y el respaldo de fuentes funciona carácter a carácter, así que latino, griego, cirílico y CJK se mezclan en una misma cadena sin que elijas tipografía. Los métodos de entrada componen dentro del campo y la edición avanza por grupos de grafemas, de modo que las marcas combinantes y los emojis de varias partes nunca se parten. Y derecha a izquierda no es solo composición: la dirección es un eje que un subárbol hereda, así que una ventana en hebreo se refleja — y aún puede contener un panel de código de izquierda a derecha.

Lee la guía de texto
La misma pantalla capturada en japonés, chino simplificado, coreano y ruso, unida en una sola ventana.
La misma pantalla capturada en japonés, chino simplificado, coreano y ruso, unida en una sola ventana.
La misma pantalla, capturada en cuatro idiomas durante esta compilación.

Tu identidad, no la del toolkit

Tu aplicación debe parecerse a tu producto, no a la biblioteca con la que se construyó. Un tema son datos puros (cada color, el radio de las esquinas, el paso de tamaño que hereda cada control), y una llamada lo cambia en tiempo de ejecución. Carga la tipografía de tu marca desde un archivo tuyo y no sobrevive nada del aspecto del toolkit.

Cómo funcionan los temas
La misma pantalla densa de controles renderizada siete veces en paralelo, cada franja con una paleta, un paso de tamaño y una tipografía distintos.
Una pantalla, siete temas. El código detrás de cada franja es idéntico.

Antes de comprometerte

Lo que Limn no hace

Todo kit renuncia a algo. Estas son las renuncias, dichas de entrada, porque descubrirlas en la tercera semana es peor que leerlas ahora.

  • Solo texto horizontal

    El árabe, el hebreo, el devanagari y el tailandés se componen allí donde se dibuje texto, la disposición se refleja a lo largo de un eje heredado de derecha a izquierda, y los dígitos, el orden y las mayúsculas siguen al idioma — los paquetes ar y he se publican, con una negrita para cada escritura. Lo que no hay es escritura vertical: ni columnas de arriba abajo, ni un segundo eje que atraviese la disposición. Las líneas se cortan; no se justifican.

  • Sin puente para lectores de pantalla

    La navegación con teclado y los anillos de foco están completos, pero nada se expone a las API de accesibilidad de la plataforma. Si un lector de pantalla tiene que funcionar, este todavía no es el kit para esa aplicación.

  • Anterior a 1.0

    La API todavía se mueve entre versiones, y OpenGL es la única vía de renderizado. Fija tu versión y lee las notas de publicación.

Una ventana en pantalla en cinco minutos

La guía de instalación termina con un programa en marcha. Todo lo demás es la guía, la galería de componentes y la referencia de la API.