문제

Guis를 수행하는 가장 좋은 방법은 무엇입니까? Clojure?

기능의 예가 있습니까? 그네 또는 SWT 싸개? 또는 약간의 통합 Javafx 쉽게 포장 할 수있는 선언 GUI 설명 S- 표현 매크로를 사용 하시겠습니까?

튜토리얼이 있습니까?

도움이 되었습니까?

해결책

나는 겸손하게 제안 할 것이다 시소.

대체 기반 자습서는 다음과 같습니다 그것은 자바 나 스윙 지식이 없다고 가정합니다.


Seesaw는 @tomjen이 제안한 것과 매우 흡사합니다. 다음은 "Hello, World"입니다.

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

다른 팁

Stuart Sierra는 최근 Clojure (및 Swing)와 함께 Gui Development에 관한 일련의 블로그 게시물을 게시했습니다. 여기에서 시작하십시오 : http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing

GUI 프로그래밍을하고 싶다면 온도 변환기 또는 개미 식민지.

스윙의 많은 것들이 특히 사용자 정의 구성 요소를 작성하는 경우 서브 클래스를 통해 수행됩니다. 이를 위해 두 가지 필수 기능/매크로가 있습니다. 대리 그리고 in-class.

이제 나는 당신이 더 많은 Lispy 방식으로 어디로 가는지 이해합니다. 아직 그런 것이 없다고 생각합니다. 나는 Grandiose Gui-Building Framework A-LA를 구축하려는 것에 대해 강력히 조언합니다. 등반, 그러나 더 lispy : 스윙 애플리케이션 작성을 시작하고 매크로로 일반적인 패턴을 추상화하십시오. 그렇게 할 때 당신은 당신의 종류의 기이를 쓸 언어로 끝나거나 공유하고 성장할 수있는 매우 일반적인 것들을 만들 수 있습니다.

Clojure에서 GUI를 쓸 때 잃어버린 한 가지는 Matisse와 같은 도구를 사용하는 것입니다. 그것은 Java (GUI)와 Clojure (논리)의 일부 부품을 작성하는 것을 가리키는 것이 강할 수 있습니다. 실제로 논리에서 마찬가지로 마크로를 사용하여 논리에 대한 언어를 구축 할 수 있으며 GUI보다 더 많은 것을 얻을 수 있다고 생각합니다. 분명히, 그것은 당신의 응용 프로그램에 따라 다릅니다.

이것으로부터 페이지:

(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 웹 사이트 섹션.

아무도 그것을 제안하지 않았으므로, 나는 UI 플랫폼으로서의 브라우저. HTTP 서버를 포함하여 Clojure에 앱을 작성한 다음 HTML에서 무엇이든 사용하여 UI를 개발할 수 있습니다. 딸꾹질, Clojurescript 및 수십억의 JS Libaries가 필요합니다. 일관된 브라우저 동작과 "데스크탑 앱 Look'n'feel"을 원한다면 앱으로 크롬을 번들로 묶습니다.

이것은 방법 인 것 같습니다 라이트 테이블 배포됩니다.

Clojure Contrib에는 Miglayout의 래퍼가 있습니다. 당신은 또한 살펴볼 수 있습니다 이 요점. 나는 기본적으로 스윙/miglayout을 배우고있는 코드를 작성하고 있습니다.

DSM의 예제는 Contrib.swing-utils를 사용하여 Lispy 방식으로 다시 작성했습니다.

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

있었어요 메일 링리스트에서 대화하십시오 약 몇 개의 세포 (la 케니 틸턴의 세포) 구현. GUI 프로그래밍을하는 매우 깔끔한 방법입니다.

차라리 Clojurefx에 가고 싶어요. 약간시기이지만 작동하고 시간을 절약합니다.

나는 Seesaw와 함께 GUI를 시작한 다음 Clojurefx에서 다른 구성 요소를 시도했습니다.

나는 둘 다 끝났고, 나는 Seesaw One을 Clojurefx에 리팩터링 할 것이라고 확신합니다.

결국 Javafx는 앞으로 나아갈 길입니다.

시소보다 가벼워집니다. 아니면 적어도 쓰기 ..

바인딩 작업, 청취자 작동, 대부분의 구성 요소 작업, 그렇지 않으면 매크로 중 하나를 사용하여 해당 특정 사례 및 작업에 대한 생성자를 만듭니다. 또는 어려운 경우 Java로 몇 가지 방법을 작성하고 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에서 GUI를 작성하는 것과 같은 질문을하고 도서관을 생각해 냈습니다. 서명

도메인 모델을 원자 안에 감싸는 단일 클로 쥬어 데이터 구조로 사용할 수 있습니다.

예제를 참조하십시오 여기.

나는 Java로 작성된 애플릿 코드를 제외한 모든 것이 Clojure로 작성된 Java 애플릿을 개발하고 있습니다. 애플릿은 애플릿 모델에 의해 정의 된 방법에 대한 Java의 후크에서 Clojure 코드의 콜백을 호출합니다. 따라서 코드는 99.999 %의 Clojure로 결국 작은 Java 조각에 대해 전혀 생각할 필요가 없습니다.

이 접근법에는 몇 가지 단점이 있으며 Clojure Google Group에 대해 자세히 설명하고 싶습니다. Clojure 개발자는 네이티브 구축 응용 프로그램을 포함해야한다고 생각합니다. 현재 REPL에서 좋아하는 GUI 작업을 수행 할 수 있지만 전달 가능한 GUI 응용 프로그램을 원한다면 Clojure 코드를 호출하려면 일부 Java를 작성해야합니다. 또한, 그것은 Java 애플릿의 아키텍처가 Clojure의 더 관용적 인 모범 사례 외부에서 당신을 강요하여 돌연변이 가능한 상태 등을 사용해야합니다.

그러나 나는 아직 Clojure와 함께 그리 멀지 않았으며 가능할 수도 있고 아직 올바르게 수행하는 방법을 발견하지 못했을 수도 있습니다.

그래서 Timothy Baldridge (Halgiri) 에서이 목록에서 FN-FX를 보지 못했습니다. 이것은 Javafx에 대한 기능적 추상화를 제공하는 Clojure 라이브러리입니다.

github at에서 찾을 수 있습니다 https://github.com/halgari/fn-fx.

사용하려면 최근 버전의 Java (1.8 90+)를 사용하고 있는지 확인하고 Project.clj에 다음을 추가하여 Github Repo에 종속성을 추가하십시오.

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

나는 그것을 시도했고 그것은 상자 밖으로 작동합니다.

Clojure와 SWT는 GUI를 수행하기위한 최선의 방법입니다. 기본적으로 SWT는 소프트웨어를 개발하기위한 플러그 앤 플레이 스타일 방식입니다.

나는 공식적인 것이 있다고 생각하지 않지만 개인적으로 나는 세계에서 가장 강력한 언어 중 하나를 사용하고 있다는 사실을 활용하고 완벽한 GUI 코드가 어떻게 보일지 상상할 것입니다.

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

당신의 아이디어는 다르지만 위의 것은 당신에게 몇 가지 아이디어를 줄 것입니다.

나는 당신이 클래식 데스크톱 솔루션을 암시하고 있다는 것을 알고 있지만 웹은 Clojure와 잘 맞습니다. 나는 모든 것이 연결되어있는 완전한 오디오 응용 프로그램을 작성하여 오디오 폴더에 음악을 추가하면 웹 UI에 반영됩니다. 데스크탑 응용 프로그램이 유일한 방법이 아니라고 말하는 것만

내가 선호하는 Clojure UI 환경이 사용합니다 io.js (ES6의 노드) + 전자 (컨테이너) + 정지 (Reactjs 래퍼).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top