العربية
GitHub
المظهر

واجهات سطح المكتب لـ Java

تطبيقات سطح مكتب بلغة Java، مرسومة من الصفر.

يرسم Limn بكسلاته بنفسه. عناصر واجهة وتخطيط ونصوص ورسوم بيانية ووسائط ومنفذ عرض ثلاثي الأبعاد، في اعتمادية واحدة، بلا 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  # محرّر السمات

خمس دقائق

اعتمادية واحدة ودالة 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();
    }
}

ما الذي تحصل عليه

طقم مكوّنات لا تضطر إلى بنائه

أزرار وحقول وقوائم وألسنة وقوائم منبثقة وحوارات وألواح منقسمة ومنتقي ألوان ورسوم بيانية شريطية وخطية ودائرية، وقائمة افتراضية يكلّف فيها مليون صف ما يكلّفه عشرون. كل واحد منها يقرأ لونه وشكله وكثافته من السمة، فلا شيء مكتوب نصًّا في الشيفرة، والوضع المضغوط سطر واحد.

اطّلع عليها كلها
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
تسميات، وتحقق، واختيار، وصف الأزرار.

الفيديو والعرض ثلاثي الأبعاد عناصر واجهة أيضًا

منفذ عرض ثلاثي الأبعاد قائم على الفيزياء ومشغّل فيديو، مركّبان كعناصر واجهة عادية: عرض التمرير يقصّهما، والرصّة ترسم فوقهما، ويشاركان في التخطيط كما تشارك التسمية.

اقرأ دليل الوسائط
The Limn 3D viewport
The Limn 3D viewport
منفذ العرض ثلاثي الأبعاد، مركّبًا في نافذة عادية.

بلغات مستخدميك

يُقاس النص بالمقادير نفسها التي يُرسم بها، ويعمل التراجع بين الخطوط حرفًا حرفًا، فتختلط اللاتينية واليونانية والسيريلية وحروف شرق آسيا في سلسلة واحدة دون أن تختار وجهًا بنفسك. أساليب الإدخال تؤلّف داخل الحقل، والتحرير يتحرك بعنقود الحروف، فلا تنفصل علامات التشكيل ولا الرموز التعبيرية متعددة الأجزاء أبدًا. والاتجاه من اليمين إلى اليسار ليس تشكيلًا فحسب: الاتجاه محور ترثه الشجرة الفرعية، فنافذة عبرية تنعكس — ويمكنها مع ذلك أن تحمل لوح شيفرة يُقرأ من اليسار إلى اليمين.

اقرأ دليل النصوص
الشاشة نفسها ملتقطة باليابانية والصينية المبسطة والكورية والروسية، مجمّعة في نافذة واحدة.
الشاشة نفسها ملتقطة باليابانية والصينية المبسطة والكورية والروسية، مجمّعة في نافذة واحدة.
الشاشة نفسها، ملتقطة بأربع لغات أثناء هذا البناء.

هويتك أنت، لا هوية الطقم

ينبغي أن يبدو تطبيقك كمنتَجك، لا كالمكتبة التي بُني بها. السمة بيانات صِرفة (كل لون، ونصف قطر الزوايا، ودرجة الحجم التي يرثها كل عنصر تحكم)، واستدعاء واحد يبدّلها أثناء التشغيل. حمّل الخط الذي تشحنه علامتك التجارية من ملف تتحكم فيه أنت، فلا يبقى من مظهر الطقم نفسه شيء.

كيف تعمل السمات
الشاشة الكثيفة نفسها من عناصر التحكم مرسومة سبع مرات جنبًا إلى جنب، كل شريط بلوحة ألوان ودرجة حجم وخط مختلفة.
شاشة واحدة، سبع سمات. الشيفرة وراء كل شريط متطابقة.

قبل أن تلتزم

ما لا يفعله Limn

كل طقم أدوات يقايض شيئًا. هذه هي المقايضات، معلنة مقدّمًا، لأن اكتشافها في الأسبوع الثالث أسوأ من قراءتها الآن.

  • نص أفقي فقط

    العربية والعبرية والديفاناغارية والتايلندية تُشكَّل أينما رُسم النص، والتخطيط يُعكس على محور موروث من اليمين إلى اليسار، والأرقام والترتيب وحالة الأحرف تتبع اللغة — حزمتا ar وhe مشحونتان، ولكل كتابة وجه عريض. ما ليس هنا هو الكتابة العمودية: لا أعمدة من أعلى إلى أسفل، ولا محور ثانٍ يخترق التخطيط. الأسطر تنكسر؛ ولا تُساوى حوافها.

  • لا جسر لقارئات الشاشة

    التنقل بلوحة المفاتيح وحلقات التركيز مكتملة، لكن لا شيء يُعرض على واجهات إتاحة الوصول في المنصة. إن كان لا بد لقارئ الشاشة أن يعمل، فهذا ليس الطقم المناسب لذلك التطبيق بعد.

  • قبل الإصدار 1.0

    لا تزال الواجهة البرمجية تتغير بين الإصدارات، وOpenGL هو مسار الرسم الوحيد. ثبّت إصدارك واقرأ ملاحظات الإصدار.

نافذة على الشاشة في خمس دقائق

دليل التثبيت ينتهي ببرنامج يعمل. كل ما بعد ذلك هو الدليل ومعرض المكوّنات ومرجع الواجهة البرمجية.