Jaki jest najlepszy sposób tworzenia GUI w Clojure ?
Czy istnieje przykład funkcjonalnego opakowania Swing lub SWT ? A może integracja z deklaratywnym opisem GUI JavaFX, który można łatwo zawinąć do wyrażeń s przy użyciu makrologii?
Jakieś tutoriale?
java
user-interface
lisp
clojure
Marko
źródło
źródło
Stuart Sierra niedawno opublikował serię postów na blogu na temat tworzenia GUI z clojure (i swing). Zacznij tutaj: http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing
źródło
Jeśli chcesz zaprogramować GUI, wskazałbym na konwerter temperatury lub kolonię mrówek .
Wiele rzeczy w Swing jest wykonywanych przez podklasy, szczególnie jeśli tworzysz komponenty niestandardowe. W tym celu istnieją dwie podstawowe funkcje / makra: proxy i klasa gen .
Teraz rozumiem, dokąd zmierzasz w bardziej zawzięty sposób. Chyba jeszcze nie ma czegoś takiego. Zdecydowanie odradzałbym próbę budowania wspaniałego frameworka do budowania GUI a-la CLIM , ale zrobienie czegoś bardziej Lispy: zacznij pisać swoją aplikację Swing i wyodrębnij swoje typowe wzorce za pomocą makr. Robiąc to, możesz skończyć z językiem do pisania swojego rodzaju GUI lub może bardzo ogólnych rzeczy, które można udostępniać i rozwijać.
Jedną rzeczą, którą tracisz podczas pisania GUI w Clojure, jest użycie narzędzi takich jak Matisse. Może to być mocna wskazówka, aby napisać niektóre części w Javie (GUI), a niektóre w Clojure (logika). Co właściwie ma sens, ponieważ w logice będziesz w stanie zbudować język dla swojego rodzaju logiki za pomocą makr i myślę, że można tam zyskać więcej niż z GUI. Oczywiście zależy to od aplikacji.
źródło
Nikt jeszcze tego nie zasugerował, więc ja: Przeglądarka jako platforma interfejsu użytkownika. Można napisać aplikację w Clojure, w tym serwera HTTP, a następnie rozwijać UI za pomocą czegokolwiek od HTML do czkawki , ClojureScript i każdy z miliardów JS bibliotekami potrzebujesz. Jeśli chcesz, aby przeglądarka działała w sposób spójny i wyglądała jak aplikacja komputerowa, możesz dodać Chrome do swojej aplikacji .
Wydaje się, że tak jest dystrybuowany Light Table .
źródło
Z tej strony :
I, oczywiście, byłoby warte patrząc na interoperacyjności odcinku stronie Clojure jest.
źródło
W Clojure contrib jest opakowanie dla MigLayout. Możesz również spojrzeć na to sedno . Zasadniczo wprowadzam dowolny kod, który piszę, ucząc się swingu / miglayout.
Przykład dsm ponownie napisany w lispy sposób przy użyciu contrib.swing-utils
źródło
Na liście mailingowej rozmawiano o kilku wdrożeniach Cells (a la Kenny Tilton's Cells ). To całkiem fajny sposób na programowanie GUI.
źródło
Wolałbym raczej wybrać clojurefx, jest trochę przedwczesny, ale działa i oszczędza czas.
Uruchomiłem GUI z huśtawką, a następnie wypróbowałem inny składnik w clojurefx.
Skończyłem oba i jestem przekonany, że mam zamiar przerobić huśtawkę na clojurefx.
W końcu JavaFX to droga do przodu.
Wydaje się lżejszy niż huśtawka. A przynajmniej pisząc to ...
Wiązania działają, słuchacze działają, większość komponentów działa, w przeciwnym razie wystarczy użyć jednego z makr, aby utworzyć konstruktor dla tego konkretnego przypadku i wykonanego zadania. Lub, jeśli okaże się to trudne, napisz kilka metod w Javie i poproś o pomoc w ulepszaniu clojurefx.
Facet, który napisał clojurefx, jest w tej chwili zajęty, ale możesz rozwidlić projekt i wprowadzić kilka poprawek.
źródło
Oto kolejny bardzo podstawowy przykład zawijania huśtawki:
źródło
Zadałem sobie to samo pytanie, pisząc GUI w Clojure z Swingiem i wymyśliłem sygnaturę biblioteczną
Pozwala reprezentować model domeny jako pojedynczą strukturę danych Clojure zawiniętą w atom.
Zobacz przykłady tutaj .
źródło
Pracowałem nad apletem Java, w którym wszystko jest napisane w Clojure z wyjątkiem kodu apletu, który jest napisany w Javie. Aplet wywołuje wywołania zwrotne init, paint, itp. Kodu Clojure z punktów zaczepienia Java dla metod zdefiniowanych przez model apletu. Tak więc kod kończy się na 99,999 procentach Clojure i nie musisz w większości myśleć o małym kawałku Java.
Takie podejście ma pewne wady, które mam nadzieję omówić bardziej szczegółowo w Clojure Google Group. Myślę, że programiści Clojure powinni uwzględnić natywny sposób budowania aplikacji. Obecnie w REPL możesz robić wszystko, co lubisz z GUI, ale jeśli chcesz dostarczać aplikację GUI, konieczne jest napisanie trochę Java, aby wywołać kod Clojure. Wygląda też na to, że architektura apletu języka Java zmusza Cię do wyjścia poza bardziej idiomatyczne najlepsze praktyki Clojure, wymagając użycia mutowalnego stanu itp.
Ale też nie jestem jeszcze zbyt daleko z Clojure i może się zdarzyć, że jest to możliwe, a po prostu jeszcze nie odkryłem, jak to zrobić poprawnie.
źródło
Moje preferowane środowisko Clojure UI używa IO.js (Node for ES6) + Electron (Container) + Quiescent (Wrapper ReactJS) .
źródło
Więc nie widziałem Fn-Fx na tej liście, od Timothy'ego Baldridge'a (halgiri). Jest to biblioteka Clojure zapewniająca funkcjonalną abstrakcję w stosunku do JavaFX.
Można go znaleźć na Github pod adresem https://github.com/halgari/fn-fx .
Aby użyć, upewnij się, że używasz najnowszej wersji Java (1.8 90+) i dodaj zależność do repozytorium github, dodając następujący plik do projektu.clj:
Wypróbowałem to i działa po wyjęciu z pudełka.
źródło
Clojure i SWT to najlepsze podejście do tworzenia graficznych interfejsów użytkownika. Zasadniczo SWT to podejście typu plug and play do tworzenia oprogramowania.
źródło
Wydaje mi się, że nie ma oficjalnego, ale osobiście skorzystałbym z faktu, że używam jednego z najpotężniejszych języków na świecie i po prostu wyobrażam sobie, jak wyglądałby idealny kod gui:
Twój pomysł byłby inny, ale mam nadzieję, że powyższe daje ci pewien pomysł.
źródło
Wiem, że sugerujesz klasyczne rozwiązania dla komputerów stacjonarnych, ale sieć całkiem dobrze pasuje do clojure. Napisałem kompletną aplikację audio, w której wszystko jest podłączone, więc jeśli dodasz muzykę do folderu audio, zostanie to odzwierciedlone w interfejsie internetowym. Tylko mówię, że aplikacja desktopowa nie jest jedynym sposobem :)
źródło