한국어
GitHub
테마

자바를 위한 데스크톱 UI

자바 데스크톱 앱을, 처음부터 직접 그립니다.

Limn은 픽셀을 스스로 그립니다. 위젯, 레이아웃, 텍스트, 차트, 미디어, 3D 뷰포트를 의존성 하나로 제공합니다. Swing도, JavaFX도, 아래에 깔린 네이티브 툴킷도 없습니다.

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

이번 빌드 중에 Limn이 그린 데모 애플리케이션.
이번 빌드 중에 Limn이 그린 데모 애플리케이션.
이번 빌드 중에 Limn이 그린 데모 애플리케이션.

지금 실행해 보기

키친 싱크와 테마 편집기를 Maven Central에서 바로. 클론할 것도 없고, 설치할 것도 jbang 하나뿐입니다. 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  # 테마 편집기

5분

의존성 하나와 main 메서드

마크업 언어도, 애너테이션 프로세서도, 빌드 플러그인도 없습니다. 툴킷을 함께 가져오는 백엔드를 추가하고 평범한 자바를 쓰면 창이 생깁니다.

설치 가이드 읽기
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행과 같은 비용으로 끝나는 가상화 목록. 모두 색과 모양과 밀도를 테마에서 읽으므로 코드에 박아 넣은 값이 없고, 조밀 모드는 한 줄입니다.

전부 보기
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 뷰포트.

사용자의 언어로

텍스트는 그릴 때와 같은 전진폭으로 측정되고, 글꼴 대체는 글자 단위로 동작합니다. 그래서 라틴·그리스·키릴·CJK가 한 문자열에 섞여도 서체를 고를 필요가 없습니다. 입력기는 입력란 안에서 조합하고, 편집은 자소 클러스터 단위로 움직여 결합 기호나 여러 부분으로 된 이모지가 잘리지 않습니다. 오른쪽에서 왼쪽은 셰이핑만이 아닙니다. 방향은 서브트리가 상속하는 축이라 히브리어 창은 거울처럼 뒤집히고, 그 안에 왼쪽에서 오른쪽으로 읽는 코드 패널을 둘 수도 있습니다.

텍스트 가이드 읽기
같은 화면을 일본어, 중국어 간체, 한국어, 러시아어로 촬영해 하나의 창으로 이어 붙인 모습.
같은 화면을 일본어, 중국어 간체, 한국어, 러시아어로 촬영해 하나의 창으로 이어 붙인 모습.
이번 빌드 중에 네 가지 언어로 찍은 같은 화면.

툴킷의 얼굴이 아니라, 당신 제품의 얼굴

애플리케이션은 그것을 만든 라이브러리가 아니라 당신의 제품처럼 보여야 합니다. 테마는 순수한 데이터입니다. 모든 색, 모서리 반경, 각 컨트롤이 상속하는 크기 단계까지 데이터이며, 실행 중 한 번의 호출로 교체됩니다. 브랜드 서체는 당신이 관리하는 파일에서 불러오므로 툴킷 고유의 외형은 하나도 남지 않습니다.

테마가 동작하는 방식
컨트롤이 빽빽한 같은 화면을 일곱 번 나란히 렌더링한 모습으로, 띠마다 팔레트와 크기 단계와 서체가 다릅니다.
화면 하나, 테마 일곱 개. 각 띠 뒤의 코드는 동일합니다.

결정하기 전에

Limn이 하지 않는 것

모든 툴킷은 무언가를 맞바꿉니다. 3주 차에 알게 되는 것보다 지금 읽는 편이 나으므로, 먼저 적어 둡니다.

  • 가로쓰기만

    아랍 문자, 히브리 문자, 데바나가리, 타이 문자는 텍스트가 그려지는 곳이라면 어디서나 셰이핑되고, 배치는 상속되는 오른쪽에서 왼쪽 축으로 뒤집히며, 숫자와 정렬과 대소문자는 언어를 따릅니다. ar과 he 번역을 배포하고 문자 체계마다 볼드도 있습니다. 없는 것은 세로쓰기입니다. 위에서 아래로 흐르는 단도, 배치를 관통하는 두 번째 축도 없습니다. 줄은 접히지만 양쪽 정렬은 하지 않습니다.

  • 화면 낭독기 연결 없음

    키보드 이동과 포커스 링은 완성되어 있지만, 플랫폼 접근성 API로는 아무것도 노출하지 않습니다. 화면 낭독기가 반드시 동작해야 한다면, 그 애플리케이션에는 아직 맞는 툴킷이 아닙니다.

  • 1.0 이전

    API는 아직 릴리스마다 움직이고, 렌더링 경로는 OpenGL 하나뿐입니다. 버전을 고정하고 릴리스 노트를 읽으세요.

5분이면 화면에 창 하나

설치 가이드는 실행되는 프로그램으로 끝납니다. 그 뒤는 가이드와 컴포넌트 갤러리, 그리고 API 레퍼런스입니다.