जवाबों:
मैं विनम्रतापूर्वक सुझाव देगा झूला ।
यहाँ एक 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/01/02/first-steps-with-clojure-swing
यदि आप GUI प्रोग्रामिंग करना चाहते हैं, तो मैं तापमान कनवर्टर या चींटियों कॉलोनी को इंगित करूंगा ।
स्विंग में कई चीजें सब-क्लासिंग द्वारा की जाती हैं, खासकर यदि आप कस्टम घटक बना रहे हैं। इसके लिए दो आवश्यक कार्य / मैक्रो हैं: प्रॉक्सी और जीन-क्लास ।
अब मैं समझ गया हूं कि आप लिस्फी के साथ कहां जा रहे हैं। मुझे नहीं लगता कि अभी तक ऐसा कुछ है। मैं दृढ़ता से एक भव्य जीयूआई निर्माण ढांचा एक-la बनाने की कोशिश के खिलाफ सलाह देंगे CLIM , लेकिन कुछ करने के लिए और अधिक Lispy: मैक्रो के साथ बाहर अपने सामान्य पैटर्न अपने घुमाओ आवेदन और अमूर्त लिखना शुरू करें। ऐसा करते समय आप अपने प्रकार के GUI लिखने के लिए भाषा के साथ समाप्त हो सकते हैं, या शायद कुछ बहुत ही सामान्य सामान हैं जिन्हें साझा किया जा सकता है और बढ़ सकता है।
जब आप क्लोज़र में GUIs लिखते समय एक चीज खो देते हैं, तो मैटिस जैसे उपकरण का उपयोग होता है। यह जावा (जीयूआई) में कुछ हिस्सों और क्लोजर (लॉजिक) में कुछ हिस्सों को लिखने के लिए एक मजबूत संकेत हो सकता है। जो वास्तव में तर्क में समझ में आता है कि आप मैक्रो का उपयोग करके अपने प्रकार के तर्क के लिए एक भाषा का निर्माण करने में सक्षम होंगे और मुझे लगता है कि वहां जीयूआई की तुलना में अधिक लाभ है। जाहिर है, यह आपके आवेदन पर निर्भर करता है।
किसी ने अभी तक इसका सुझाव नहीं दिया है, इसलिए मैं: ब्राउज़र को यूआई प्लेटफॉर्म के रूप में देखूंगा। आप एक HTTP सर्वर सहित क्लोजर में अपना ऐप लिख सकते हैं और फिर एचटीएमएल से हिचकी , क्लोजरस्क्रिप्ट और अरबों जेएस के कई कामों का उपयोग करके यूआई विकसित कर सकते हैं । यदि आप लगातार ब्राउज़र व्यवहार और "डेस्कटॉप ऐप देखना चाहते हैं" तो आप अपने ऐप के साथ क्रोम बंडल कर सकते हैं ।
यह प्रतीत होता है कि लाइट टेबल कैसे वितरित की जाती है।
इस पेज से :
(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");
और, निश्चित रूप से, यह क्लोजर की वेबसाइट के इंटरऑपरेबिलिटी सेक्शन को देखने लायक होगा ।
क्लोजर कंट्रीब में मिगलैयूट के लिए एक आवरण है। आप इस जिस्ट पर भी नज़र डाल सकते हैं । मैं मूल रूप से जो भी कोड लिख रहा हूं, वह स्विंग / माइगेलआउट सीख रहा हूं।
dsm का उदाहरण contrib.swing-utils का उपयोग करते हुए एक लिस्फी तरीके से फिर से लिखा गया है
(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)))
हुई है मेलिंग सूची पर बात करते हैं (एक ला में कुछ कोशिकाओं के बारे में केनी Tilton के प्रकोष्ठों ) कार्यान्वयन। यह GUI प्रोग्रामिंग करने के लिए एक बहुत साफ तरीका है।
मैं बल्कि क्लोजुरेफैक्स के लिए जाना चाहता हूं, यह थोड़ा समय से पहले है, लेकिन यह काम करता है और आपको समय बचाता है।
मैंने अपना GUI वॉचॉ के साथ शुरू किया और फिर क्लोजुरेफएक्स में एक और घटक की कोशिश की।
मैंने दोनों को पूरा कर लिया है, और मुझे विश्वास है कि मैं क्लोजुरेफ़क्स को सीवर्स एक को रिफ्लेक्टर करने जा रहा हूं।
आखिरकार, JavaFX आगे बढ़ने का तरीका है।
यह देखने में हल्का लगता है। या कम से कम, यह लिखना ।।
बाइंडिंग कार्य, श्रोता काम करते हैं, अधिकांश घटक काम करते हैं, अन्यथा, उस विशेष मामले और काम के लिए एक निर्माता बनाने के लिए बस मैक्रोज़ में से एक का उपयोग करें। या, यदि आपको यह मुश्किल लगता है, तो जावा में कुछ तरीके लिखें और क्लोजुरेक्स को बेहतर बनाने के लिए मदद मांगें।
जिस व्यक्ति ने क्लोजुरेफ़ैक्स लिखा था वह इस समय व्यस्त है, लेकिन आप इस परियोजना को कांटा कर सकते हैं और कुछ सुधार कर सकते हैं।
यहाँ एक और बहुत ही मूल स्विंग रैपिंग उदाहरण है:
; 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)))
मैं एक जावा एप्लेट विकसित कर रहा हूं जिसमें एप्लेट कोड को छोड़कर क्लोजर में सब कुछ लिखा गया है, जो जावा में लिखा गया है। एप्लेट उन तरीकों के लिए जावा के हुक से क्लिटज कोड के इनिट, पेंट आदि के कॉलबैक को आमंत्रित करता है, जो एप्लेट मॉडल द्वारा परिभाषित किए गए हैं। तो कोड 99.999 प्रतिशत क्लोजर हो रहा है और आपको अधिकांश भाग के लिए छोटे जावा टुकड़े के बारे में सोचने की जरूरत नहीं है।
इस दृष्टिकोण में कुछ कमियां हैं, जिन्हें मैं क्लोजर Google समूह पर अधिक विस्तार से चर्चा करने की उम्मीद करता हूं। मुझे लगता है कि क्लोजर डेवलपर्स को अनुप्रयोगों के निर्माण का एक देशी तरीका शामिल करना चाहिए। वर्तमान में आप आरईपीएल से जो भी जीयूआई सामान पसंद करते हैं, कर सकते हैं, लेकिन यदि आप एक डिलीवरी योग्य जीयूआई आवेदन चाहते हैं, तो क्लोजर कोड को कॉल करने के लिए कुछ जावा लिखना आवश्यक है। इसके अलावा, यह एक जावा एप्लेट की ताकतों की वास्तुकला की तरह लगता है, जो आपको क्लोजर के अधिक मुहावरेदार सर्वोत्तम प्रथाओं के बाहर है, जिससे आपको उत्परिवर्ती राज्य का उपयोग करने की आवश्यकता होती है, आदि।
लेकिन यह भी, मैं क्लोजर के साथ अभी तक बहुत दूर नहीं हूं और यह मामला हो सकता है कि यह संभव है और मैंने अभी तक इसे सही तरीके से करने का तरीका नहीं खोजा है।
मेरा पसंदीदा क्लोजर यूआई वातावरण IO.js (ES6 के लिए नोड) + इलेक्ट्रॉन (कंटेनर) + क्वाइसेन्ट (ReactJS आवरण) का उपयोग करता है ।
इसलिए मैंने टिमोथी बाल्ड्रिज (हलगिरी) से इस सूची में एफएन-एफएक्स नहीं देखा। यह एक Javajure लाइब्रेरी है जो JavaFX पर एक कार्यात्मक अमूर्तता प्रदान करती है।
यह Github पर https://github.com/halgari/fn-fx पर पाया जा सकता है ।
उपयोग करने के लिए, सुनिश्चित करें कि आप जावा (1.8 90+) के एक हालिया संस्करण का उपयोग कर रहे हैं और अपने प्रोजेक्ट में निम्नलिखित को जोड़कर गीथूब रेपो पर निर्भरता जोड़ें:
:plugins [[lein-git-deps "0.0.1-SNAPSHOT"]]
:git-dependencies [["https://github.com/halgari/fn-fx.git"]]
मैंने इसकी कोशिश की है, और यह बॉक्स से बाहर काम करता है।
जीयूआई करने के लिए क्लोजर और एसडब्ल्यूटी सबसे अच्छा तरीका है। अनिवार्य रूप से, SWT सॉफ्टवेयर विकसित करने के लिए एक प्लग एंड प्ले शैली दृष्टिकोण है।
मुझे नहीं लगता है कि कोई अधिकारी है, लेकिन व्यक्तिगत रूप से मैं इस तथ्य का लाभ उठाऊंगा कि मैं दुनिया की सबसे शक्तिशाली भाषा का उपयोग कर रहा हूं और बस कल्पना कीजिए कि सही गुई कोड कैसा दिखेगा:
(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 में परिलक्षित होता है। सिर्फ डेस्कटॉप अनुप्रयोग ही रास्ता नहीं कह रहा है :)