ক্লোজুরে জিইউআই করার সর্বোত্তম উপায় কী?


150

ক্লোজুরে জিইউআই করার সর্বোত্তম উপায় কী ?

কিছু কার্যকরী সুইং বা এসডাব্লুটি র‌্যাপারের উদাহরণ রয়েছে ? অথবা জাভাএফএক্সের ঘোষণামূলক জিইউআই বর্ণনার সাথে কিছু সংহতকরণ যা সহজেই কিছু ম্যাক্রোলজি ব্যবহার করে এস-এক্সপ্রেশনগুলিতে আবৃত হতে পারে ?

কোন টিউটোরিয়াল?

উত্তর:


121

আমি বিনীতভাবে Seesaw পরামর্শ দিতে হবে ।

এখানে একটি REPL- ভিত্তিক টিউটোরিয়াল যা জাভা বা সুইং জ্ঞান ধরে না।


সিমসও অনেকটা @ টমজেনের পরামর্শ মতো। এখানে "হ্যালো, ওয়ার্ল্ড":

(use 'seesaw.core)

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

এবং এখানে @ অভিজিথ এবং @ ডিএসএম এর উদাহরণ, বেশ আক্ষরিক অনুবাদ করা হয়েছে:

(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!)

2
সুইং মজা করা? তারা বলেছিল এটা সম্ভব হয়নি!
মাইকেল বাইলস্ট্র্রা

9
বিনীত হওয়ার দরকার নেই - আপনি এটির জন্য খুব গর্বিত হতে পারেন! +1 টি!
mydoghasworms

7
-1: আপনার কোডে একটি বাগ আছে। এটি "হ্যালো, ওয়ার্ল্ড" এর পরিবর্তে "হ্যালো, সিসো" বলে। </ তামাশা>
টমাস Eding

1
সত্যি? সুইং? এটি কি বিকাশকারীকে কার্যকারিতা সুইং অফারগুলিতে সীমাবদ্ধ করে না, কেবল উচ্চতর বিমূর্ততার উপর, যদি থাকে? ক্লোজুরে কি কোনওভাবে অ্যাপ্লিকেশনগুলিকে কম পুরানো দেখায়, বা এটি এমন কোনও ক্ষেত্রে উন্নত করে যেখানে সিং দুর্বল? আমি বাইন্ডিং এবং এমভিসি এবং সেই সমস্ত "নতুন" স্টাফ সম্পর্কে কথা বলছি, যা সুইং এখন প্রতি সেচ সরবরাহ করে। এটি কি কোনওভাবে ক্লোজারের ভাষা বৈশিষ্ট্যগুলির দ্বারা ঠিক করা হয়েছে?
জেলফির কালটসটহল

1
তিনি বিশেষত সুইংকে কেন্দ্র করে একটি বিমূর্ত বিমূর্ততা তৈরি করতে বেছে নিয়েছিলেন। এতে কোনও ভুল নেই ...
কেনোগু ল্যাবজ


16

আপনি জিইউআই প্রোগ্রামিং করতে চাইলে আমি তাপমাত্রা রূপান্তরকারী বা পিঁপড়ার কলোনির দিকে নির্দেশ করব

সুইংয়ের অনেকগুলি কাজ উপ-শ্রেণিবদ্ধকরণ দ্বারা করা হয়, বিশেষত যদি আপনি কাস্টম উপাদান তৈরি করে থাকেন। তার জন্য দুটি প্রয়োজনীয় ফাংশন / ম্যাক্রো রয়েছে: প্রক্সি এবং জেন-ক্লাস

এখন আমি বুঝতে পারছি আপনি আরও লিস্পি পথে কোথায় যাচ্ছেন। আমি মনে করি না এর মতো আর কিছু আছে। আমি একটি জাঁকজমকপূর্ণ জিইউআই-বিল্ডিং কাঠামোটি একটি লা ক্লিম তৈরির চেষ্টা করার বিরুদ্ধে দৃ strongly়ভাবে পরামর্শ দেব কিন্তু কিছু আরও Lispy: ম্যাক্রো সঙ্গে আপনার সাধারণ নিদর্শন আপনার সুইং আবেদন এবং বিমূর্ত লেখা শুরু। এটি করার সময় আপনি আপনার জিইউআই টাইপগুলি লিখতে কোনও ভাষা শেষ করতে পারেন বা কিছু খুব জেনেরিক জিনিস যা ভাগ করে নেওয়া এবং বাড়ানো যায়।

ক্লোজুরে জিইউআই লেখার সময় আপনি যে জিনিসটি হারাবেন তা হ'ল ম্যাটিসির মতো সরঞ্জামগুলির ব্যবহার। এটি জাভাতে কিছু অংশ (জিইউআই) এবং ক্লোজুরে কিছু কিছু অংশ (যুক্তি) লেখার জন্য একটি শক্তিশালী ইঙ্গিত হতে পারে। যুক্তিটির মত যা আসলে উপলব্ধি করে আপনি ম্যাক্রো ব্যবহার করে আপনার ধরণের যুক্তির জন্য একটি ভাষা তৈরি করতে সক্ষম হবেন এবং আমি মনে করি জিইউআইয়ের চেয়ে সেখানে আরও কিছু পাওয়ার আছে। স্পষ্টতই, এটি আপনার আবেদনের উপর নির্ভর করে।


2
ম্যাটিসকে হারিয়ে যাওয়ার বিষয়ে চিন্তা করবেন না। আপনি miglayout.com ব্যবহার করতে পারেন, এটি যথেষ্ট শক্তিশালী যে আপনি হাত দ্বারা লেআউটগুলি করতে পারেন।
টমজেন

আপনি ক্লোজারের সাথে ম্যাটিস ব্যবহার করতে পারেন, কারণ উত্পন্ন কোডটি কেবল জাভা কোড যা ক্লোজুরে দ্বারা নির্বিঘ্নে অ্যাক্সেস করা যায়। এর কোথাও কোথাও আসলে একটি টিউটোরিয়াল রয়েছে ...
রায়েন

3
আমি যখন প্রথম ক্লোজার-আউটপুটিং জিইউআই ডিজাইনার পাই তখন আমি অবাক হই। সমজাতীয়তার কারণে, উত্পন্ন কোডটি এমনকি খারাপ হওয়া উচিত নয়!
n23325681

15

এখনও কেউ এটি প্রস্তাব করেনি, তাই আমি করব: ইউআই প্ল্যাটফর্ম হিসাবে ব্রাউজার। আপনি Clojure মধ্যে আপনার অ্যাপ্লিকেশান লিখতে পারে একটি HTTP সার্ভার সহ এবং তারপর এইচটিএমএল থেকে কিছু ব্যবহার করার UI 'তে বিকাশ হিক্কা , ClojureScript এবং জাতীয় বিলিয়ান কোনো libaries আপনার যা দরকার। আপনি যদি সামঞ্জস্যপূর্ণ ব্রাউজার আচরণ এবং "ডেস্কটপ অ্যাপ্লিকেশন'''''ফিল" চান আপনি আপনার অ্যাপ্লিকেশন দিয়ে ক্রোম বান্ডেল করতে পারেন ।

এটি হালকা টেবিলটি কীভাবে বিতরণ করা হবে তা মনে হচ্ছে ।


এটি দুর্দান্ত, তবে যথাযথ বন্দর নির্ধারণ করা প্রতিটি ক্লায়েন্ট মেশিনে জটিল হতে পারে
স্কেপ

14

এই পৃষ্ঠা থেকে :

(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");

এবং, অবশ্যই, দিকে তাকিয়ে মূল্য হবে ইনটেরোপিরাবিলিটি clojure ওয়েবসাইটের অধ্যায়।


3
হ্যাঁ, আমি জানি আপনি সরাসরি সুইং ব্যবহার করে ফিরে যেতে পারেন, তবে আরও জিজ্ঞাসাবাদ করার উপায় আছে কিনা তা জিজ্ঞাসাবাদ করেছিলাম।
মার্কো

আরও মনে রাখবেন যে বন্ধ হওয়ার আরও সাম্প্রতিক সংস্করণগুলিতে আপনাকে একটি যুক্ত করতে হবে। সদস্য ফাংশন সামনে টুডো ব্লক কল।
জেরোইন ডার্কস

8

ক্লোজুরে অবদানের জন্য মিগলআউটের জন্য একটি মোড়ক রয়েছে। আপনি এই सारটি একবার দেখে নিতে পারেন । আমি সুইং / মাইগলআউট শিখার সাথে সাথে আমি যা লিখছি তা মূলত লিখছি।

ডিএসএমের উদাহরণ অবদানের সাথে ব্যবহার করে সুস্পষ্ট উপায়ে পুনরায় লিখিত wing

(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)))


6

আমি ক্লোজুরেফেক্সের পরিবর্তে যাব, এটি কিছুটা অকালিক, তবে এটি কাজ করে এবং আপনার সময় সাশ্রয় করে।

আমি সাসা দিয়ে আমার জিইউআই শুরু করেছি এবং তারপরে ক্লোজুরেফেক্সে আরও একটি উপাদান চেষ্টা করেছি।

আমি উভয়ই শেষ করেছি, এবং আমি দৃ am়ভাবে বিশ্বাস করি যে আমি দেখলাম একজনকে ক্লোজুরেফেক্সে রিফ্যাক্টর করব।

সর্বোপরি, জাভাএফএক্স হ'ল এগিয়ে যাওয়ার পথ।

এটি দেখে দেখে হালকা বোধ করে। বা কমপক্ষে, এটি লিখুন ..

বাইন্ডিংগুলি কাজ করে, শ্রোতাদের কাজ করে, বেশিরভাগ উপাদান কাজ করে, অন্যথায়, কেবলমাত্র সেই নির্দিষ্ট কেস এবং কাজের জন্য একটি নির্মাণকারী তৈরি করতে একটি ম্যাক্রো ব্যবহার করুন use অথবা, যদি আপনার অসুবিধা হয় তবে জাভাতে কিছু পদ্ধতি লিখুন এবং ক্লোজুরেফেক্সের উন্নতির জন্য সহায়তা চাইতে পারেন।

যে লোকটি ক্লোজুরেফেক্স লিখেছিল সে মুহূর্তে ব্যস্ত, তবে আপনি প্রকল্পটি কাঁটাচামচ করতে পারেন এবং কিছু সংশোধন করতে পারেন।


জাভাএফএক্স এখনও খুব স্থানীয় না দেখার সমস্যা সমাধান করেছে? গুরুতর প্রশ্ন, কারণ যখন আমি প্রথমবার এটি পরীক্ষা করে দেখলাম, এটি অনেক আগে হয়েছিল এবং এটি সুইংয়ের চেয়ে কম সঠিক দেখাচ্ছে।
ট্রেজকাজ

4

এখানে অন্য একটি খুব বেসিক সুইং মোড়কের উদাহরণ:

; 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)))

3

আমি নিজেকে সুইং দিয়ে ক্লোজুরে জিইউআই লেখার একই প্রশ্নটি জিজ্ঞাসা করেছি এবং লাইব্রেরির সিগনে নিয়ে এসেছি

এটি আপনাকে পরমাণুর অভ্যন্তরে মোড়ানো একক ক্লোজার ডেটা স্ট্রাকচার হিসাবে আপনার ডোমেন মডেলটি উপস্থাপন করতে দেয়।

উদাহরণ এখানে দেখুন


2

আমি একটি জাভা অ্যাপলেট বিকাশ করেছি যেখানে অ্যাপল কোড বাদে ক্লোজারে সমস্ত কিছুই লেখা আছে, যা জাভাতে লেখা আছে। অ্যাপলেট মডেল দ্বারা সংজ্ঞায়িত সেই পদ্ধতিগুলির জন্য জাভা হুক থেকে ক্লোজার কোডের থিম, পেইন্ট ইত্যাদির কলব্যাকগুলি আহ্বান জানিয়েছেন। সুতরাং কোডটি 99.999 শতাংশ ক্লোজার হয়ে শেষ হয়ে যায় এবং আপনাকে বেশিরভাগ অংশের জন্য ক্ষুদ্র জাভা টুকরো সম্পর্কে ভাবার দরকার নেই।

এই পদ্ধতির কিছু ত্রুটি রয়েছে, যা আমি ক্লোজার গুগল গ্রুপে আরও বিশদে আলোচনা করব। আমি মনে করি ক্লোজুর বিকাশকারীদের বিল্ডিং অ্যাপ্লিকেশনগুলির একটি দেশীয় উপায় অন্তর্ভুক্ত করা উচিত। বর্তমানে আপনি REPL থেকে আপনার পছন্দ মতো জিইউআই স্টাফগুলি করতে পারেন তবে আপনি যদি একটি বিতরণযোগ্য জিইউআই অ্যাপ্লিকেশন চান তবে ক্লোজার কোডটি কল করতে কিছু জাভা লিখতে হবে write এছাড়াও, এটি জাভা অ্যাপলেট জাতীয় ধরণের আর্কিটেকচারের মতো বলে মনে হচ্ছে আপনাকে ক্লোজুরের আরও বুদ্ধিমানের সর্বোত্তম অনুশীলনের বাইরে জোর করে, যাতে আপনাকে পরিবর্তনীয় অবস্থা ইত্যাদি ব্যবহার করতে হবে etc.

তবে, আমি এখনও ক্লোজুরের সাথে খুব বেশি দূরে নই এবং এটি সম্ভবত এটি সম্ভব এবং এটি সঠিকভাবে কীভাবে করা যায় তা আমি এখনও আবিষ্কার করতে পারি নি।


2

1
এটি জটিল হতে পারে তবে আমি এখনও জানতে চাই: আপনি কীভাবে এই টুকরোগুলি দিয়ে শুরু করবেন তার একটি উদাহরণ দিতে পারেন? বা আপনি উল্লিখিত ফ্রেমওয়ার্ক / লাইব্রেরিগুলির মধ্যে কোনটির কোন অংশটি পরিচালনা করবেন তা বর্ণনা করুন?
জেলফির কালটস্টল

2

তাই আমি টিমোথি বালড্রিজ (হালগিরি) থেকে এফএন-এফএক্সকে এই তালিকায় দেখিনি। এটি একটি ক্লোজার লাইব্রেরি জাভাএফএক্সের মাধ্যমে একটি কার্যকরী বিমূর্ততা সরবরাহ করে।

এটি 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"]]

আমি এটি চেষ্টা করে দেখেছি এবং এটি বাক্সের বাইরে কাজ করে।


1

ক্লুজার এবং এসডাব্লুটিটি জিইউআই করার জন্য সর্বোত্তম পন্থা। মূলত, এসডাব্লুটিটি সফ্টওয়্যার বিকাশের জন্য একটি প্লাগ এবং প্লে স্টাইল পদ্ধতির।


1
আপনি একটি লিঙ্ক বা একটি উদাহরণ প্রদান করতে পারেন? আমি আগ্রহী হতে পারি তবে কীভাবে শুরু করব সে সম্পর্কে কোনও ধারণা নেই।
কার্ল স্মট্রিক্জ

1
কার্ল, দ্বিতীয় যে। ক্লোজার ব্যবহার করে কীভাবে Eclipse প্লাগইন লিখতে হবে তার একটি ভাল টিউটোরিয়াল বরং দুর্দান্ত হবে।
ডিম উইলিঘেইন

1

আমি মনে করি না যে এখানে কোনও অফিসিয়াল আছে, তবে ব্যক্তিগতভাবে আমি এই সত্যটির সুবিধা নেব যে আমি বিশ্বের অন্যতম শক্তিশালী ভাষা ব্যবহার করছি এবং কেবল গি কোডটি দেখতে কেমন হবে তা কল্পনা করুন:

(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})])

আপনার ধারণা পৃথক হবে তবে আশা করা যায় যে উপরেরটি আপনাকে কিছু ধারণা দেয়।


গ্রোভি সুইংবিল্ডার ডিএসএল ক্লোজুরেতে অনুবাদ হয়েছে বলে মনে হচ্ছে।
মার্কো

@ দেব-এর-দেব এটি খুব সম্ভব, আমি কখনও গ্রোভি ব্যবহার করি নি, তবে দুর্দান্ত
মনরা

1

আমি জানি যে আপনি ক্লাসিকাল ডেস্কটপ সমাধানগুলির জন্য ইঙ্গিত দিচ্ছেন, তবে ওয়েব ক্লোজারের সাথে বেশ ভাল ফিট করে। আমি একটি সম্পূর্ণ অডিও অ্যাপ্লিকেশন লিখেছি যেখানে সবকিছু হুক আপ হয়ে যায় যাতে আপনি যদি অডিও ফোল্ডারে সঙ্গীত যোগ করেন তবে এটি ওয়েব ইউআইতে প্রতিফলিত হবে। ডেস্কটপ অ্যাপ্লিকেশন একমাত্র উপায় নয় যে কেবল :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.