ما هي أفضل طريقة لعمل واجهات المستخدم الرسومية في Clojure؟

StackOverflow https://stackoverflow.com/questions/233171

سؤال

ما هي أفضل طريقة للقيام بواجهات المستخدم الرسومية كلوجر?

هل هناك مثال على بعض وظيفية يتأرجح أو سبحانه وتعالى غلاف؟أو بعض التكامل مع جافا اف اكس وصف تعريفي لواجهة المستخدم الرسومية والذي يمكن تغليفه بسهولة تعبيرات s باستخدام بعض علم الماكرولوجى؟

أي دروس؟

هل كانت مفيدة؟

المحلول

وسوف أقترح بتواضع متأرجحة .

إليك ل البرنامج التعليمي القائم على REPL أن لا تتحمل أية جافا أو أرجوحة المعرفة.


ومتأرجحة في الكثير مثل ما يوحيtomjen. هنا "مرحبا، العالم":

(use 'seesaw.core)

(-> (frame :title "Hello"
       :content "Hello, Seesaw"
       :on-close :exit)
  pack!
  show!)

وهناAbhijith والمثال @ DSM، وتترجم حرفيا جدا:

(ns seesaw-test.core
  (:use seesaw.core))

(defn handler
  [event]
  (alert event
    (str "<html>Hello from <b>Clojure</b>. Button "
      (.getActionCommand event) " clicked.")))

(-> (frame :title "Hello Swing" :on-close :exit
           :content (button :text "Click Me" :listen [:action handler]))
  pack!
  show!)

نصائح أخرى

وستيوارت سييرا نشرت مؤخرا سلسلة من بلوق وظائف في واجهة المستخدم الرسومية التنمية مع كلوجر (والبديل). تبدأ هنا: http://stuartsierra.com/2010/ 2/1 / أول خطوات مع كلوجر أرجوحة

إذا كنت تريد أن تفعل برمجة واجهة المستخدم الرسومية ويهمني الإشارة إلى تحويل درجة الحرارة أو النمل مستعمرة .

تتم

والعديد من الأشياء في أرجوحة بواسطة classing من الباطن، وخاصة إذا كنت تقوم بإنشاء مكونات مخصصة. لذلك هناك نوعان من المهام الأساسية / وحدات الماكرو: وكيل و<لأ href = "HTTP: // كلوجر. غزاله / المعهد # toc234 "يختلط =" noreferrer "> جنرال من الدرجة .

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

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

:

(import '(javax.swing JFrame JButton JOptionPane)) ;'
(import '(java.awt.event ActionListener))          ;'

(let [frame (JFrame. "Hello Swing")
     button (JButton. "Click Me")]
 (.addActionListener button
   (proxy [ActionListener] []
     (actionPerformed [evt]
       (JOptionPane/showMessageDialog  nil,
          (str "<html>Hello from <b>Clojure</b>. Button "
               (.getActionCommand evt) " clicked.")))))

 (.. frame getContentPane (add button))

 (doto frame
   (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
   .pack
   (.setVisible true)))

print("code sample");

و، بطبيعة الحال، فإنه سوف يكون من المفيد النظر في القسم التوافقية من موقع كلوجر ل.

لا أحد اقترح بعد ذلك، ولذا فإنني سوف: متصفح كمنصة UI. هل يمكن كتابة التطبيق في كلوجر، بما في ذلك خادم HTTP ومن ثم تطوير واجهة المستخدم باستخدام أي شيء من HTML إلى زوبعة ، ClojureScript وأي من مليارات يملكون مكتبات JS تحتاج. إذا أردت سلوك متصفح ثابت و"سطح المكتب التطبيق look'n'feel" هل يمكن أن حزمة الكروم مع التطبيق الخاص بك .

ويبدو أن هذا كيف ضوء الجدول يتم توزيع.

وهناك مجمع لMigLayout في contrib كلوجر. يمكنك أيضا أن تأخذ نظرة على هذا جوهر . أنا أضع الاساس مهما كود أنا أكتب لأنني أتعلم سوينغ / miglayout.

وDSM في المثال إعادة كتابتها بطريقة lispy باستخدام contrib.swing تيلس

(ns test
      (:import (javax.swing JButton JFrame))
      (:use (clojure.contrib
          [swing-utils :only (add-action-listener)])))

    (defn handler
      [event]
      (JOptionPane/showMessageDialog nil,
        (str "<html>Hello from <b>Clojure</b>. Button "
          (.getActionCommand event) " clicked.")))

    (let [ frame (JFrame. "Hello Swing") 
           button (JButton. "Click Me")  ]
      (add-action-listener button handler)
        (doto frame
          (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
          (.add button)
          (.pack)
          (.setVisible true)))

وكان هناك الحديث عن القائمة البريدية عن عدد قليل من خلايا ( على غرار خلايا كيني تيلتون في ) التنفيذ. انها وسيلة نظيفة جدا أن تفعل برمجة واجهة المستخدم الرسومية.

وأود أن أذهب وليس لclojurefx، فإنه من السابق لأوانه بعض الشيء، ولكنه يعمل ويوفر عليك الوقت.

ولقد بدأت GUI بلدي مع متأرجحة ثم حاول مكون آخر في clojurefx.

ولقد انتهيت على حد سواء، وأنا مقتنع أنني ذاهب إلى ريفاكتور واحد متأرجحة إلى clojurefx.

وبعد كل شيء، سكريبت هو السبيل للمضي قدما.

وتشعر أنها أخف وزنا من متأرجحة. أو على الأقل، حتى كتابة هذا التقرير ..

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

والرجل الذي كتب clojurefx مشغول في الوقت الحالي، ولكن يمكنك مفترق المشروع والقيام ببعض الإصلاحات.

وهنا هو أبسط من ذلك مثلا أرجوحة التفاف آخر:

; time for some swing
(import '(javax.swing JFrame JTable JScrollPane))
(import '(javax.swing.table DefaultTableModel))

(let 
  [frame (JFrame. "Hello Swing")
    dm (DefaultTableModel.)
      table (JTable. dm)
        scroll (JScrollPane. table)]
  (doto dm
      (.setNumRows 30)
        (.setColumnCount 5))
  (.. frame getContentPane (add scroll))
    (doto frame
      (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE) 
        (.pack)
        (.setVisible true)))

سألت نفسي نفس السؤال حول كتابة واجهة المستخدم الرسومية في Clojure باستخدام Swing وتوصلت إلى المكتبة التوقيع

يتيح لك استخدام تمثيل نموذج المجال الخاص بك كبنية بيانات Clojure واحدة ملفوفة داخل الذرة.

انظر الأمثلة هنا.

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

وهناك بعض المآخذ على هذا النهج، والتي آمل لمناقشة بمزيد من التفصيل على Google مجموعة كلوجر. أعتقد أن تشمل المطورين كلوجر طريقة الأم في بناء التطبيقات. حاليا يمكنك أن تفعل ما الاشياء GUI الذي ترغبه من REPL، ولكن إذا كنت ترغب في تطبيق واجهة المستخدم الرسومية للتسليم، فمن الضروري كتابة بعض جافا لاستدعاء رمز كلوجر. أيضا، يبدو أن بنية نوع برنامج Java القوات أنت خارج من أفضل الممارسات أكثر الاصطلاحية كلوجر، وتتطلب منك استخدام دولة قابلة للتغيير، وما إلى ذلك.

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

لذلك لم أرى Fn-Fx في هذه القائمة، من تيموثي بالدريدج (هالجيري).هذه مكتبة Clojure توفر فكرة عملية عن JavaFX.

يمكن العثور عليها على جيثب في https://github.com/halgari/fn-fx.

للاستخدام، تأكد من أنك تستخدم إصدارًا حديثًا من Java (1.8 90+) وأضف تبعية إلى github repo عن طريق إضافة ما يلي إلى project.clj الخاص بك:

:plugins [[lein-git-deps "0.0.1-SNAPSHOT"]]
:git-dependencies [["https://github.com/halgari/fn-fx.git"]]

لقد قمت بتجربته، وهو يعمل خارج الصندوق.

وكلوجر وتعالى هو أفضل نهج للقيام واجهة المستخدم الرسومية (ق). أساسا، سبحانه وتعالى هو نهج التوصيل والتشغيل على غرار لتطوير البرمجيات.

وأنا لا أعتقد أن هناك أحد المسؤولين، ولكن أنا شخصيا سوف تستفيد من حقيقة أن أستخدمه واحدة من اللغة الأكثر نفوذا في العالم، ولكم أن تتخيلوا ما رمز واجهة المستخدم الرسومية المثالي ستبدو:

(form {:title :on-close dispose :x-size 500 :y-size 450}
  [(button {:text "Close" :id 5 :on-click #(System/exit 0) :align :bottom})
   (text-field {:text "" :on-change #(.println System/out (:value %)) :align :center})
   (combo-box {:text "Chose background colour" :on-change background-update-function
               :items valid-colours})])

وفكرتك سوف تختلف ولكن هذا يجب أن نأمل أعلاه يعطيك فكرة.

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

وبلدي البيئة كلوجر UI يفضل تستخدم IO.js (عقدة لES6) + <لأ href = "HTTP : //electron.atom.io/ "يختلط =" نوفولو "> الكترون (الحاويات) + هادئة ( ReactJS المجمع) .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top