gpt4 book ai didi

swing - 将简单的 Ltk-app 翻译成 Clojure 跷跷板/ Swing

转载 作者:行者123 更新时间:2023-12-04 04:53:06 24 4
gpt4 key购买 nike

我正在尝试为即将到来的项目在 Clojure 和 CL 之间做出决定。为了弄湿我的脚,我在玩一些简单的 GUI 东西。

这是我在 CL/Ltk 中的内容:

(ql:quickload "ltk")

(defpackage :myed
(:use :ltk :cl))
(in-package :myed)

(defun ed-label (fr)
(make-instance 'label :master fr :font "Sans-Serif" :text "Editor"))

(defparameter *text-field*
(make-instance 'text
:font "monospaced" :takefocus :t))

(defparameter *a-tale*
"It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light")

(defun make-frame ()
(with-ltk ()
(let* ((f (make-instance 'frame))
(scroll (make-instance 'scrolled-text :master f))
(outtext (textbox scroll)))
(pack f)
(configure outtext :font "monospaced" :background "#aea79f" :wrap :word)
(pack (ed-label f) :anchor :nw :side :top)
(pack scroll :anchor :nw :expand t :fill :both)
(pack *text-field* :anchor :sw :fill :x :ipady 10)
(setf (text outtext) *a-tale*)
(bind *text-field* "<KeyPress-Return>"
(lambda (event) (format-output outtext)))
(configure f :borderwidth 2))))

(defun format-output (target)
"Print inputstring with newlines and > ."
(append-text target (format nil "~%~%> ~A~%~%" (text *text-field*)))
(clear-text *text-field*))

两个文本字段,当我在底部窗口中输入文本并按 Enter 键时,会添加换行符和“>”,并将文本附加到顶部文本字段中。

在 Clojure 中,我尝试过 Seesaw 和这个:
(ns myedclj.core
(:use [seesaw core keymap])
(:require [seesaw.bind :as bind]))

(def outtext
( text
:multi-line? true :wrap-lines? true :editable? false))

(def ed-label (label :text "Editor"))

(def intext
(text :multi-line? false :editable? true))

(def a-tale
"It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light")

(defn format-output
[target]
(.append target (str "\n\n" "> " (text intext))))

(map-key intext "ENTER" (fn [_] (format-output outtext)))

(text! outtext a-tale)

(defn make-frame []
(frame :content (vertical-panel
:border 2
:items [ed-label
(scrollable outtext)
intext])))

(defn -main [& args]
(-> (make-frame)
pack!
show!))

不幸的是,这是行不通的。窗口内容的尺寸与我想要的相反,我没有看到任何滚动条。顺便说一句,我的 Swing 知识并不存在。

任何帮助将不胜感激。

最佳答案

(更新为更接近 CL 版本的类似版本。请参阅带有可拖动分隔符的 90/10 拆分版本的修订历史记录。)

一旦文本不再适合输出文本区域,滚动条就会出现。

大小也可以配置为 (config! in-text :size [400 :by 20]) ,同样适用于 out-scrollable .

(ns myedclj.core
(:require [seesaw.core :refer :all]
[seesaw.keymap :refer :all]
[seesaw.bind :as bind]))

(def in-text
(text :editable? true :multi-line? false
:size [400 :by 20]))

(def out-text
(text :editable? false :multi-line? true :wrap-lines? true))

(def out-scrollable
(scrollable out-text
:size [400 :by 180]))

(def a-tale
"It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light")

(defn format-output! [source target]
(value! target (str (value target) "\n\n> " (value source)))
(value! source ""))

(defn attach-listeners! []
(map-key in-text "ENTER"
(fn [_] (format-output! in-text out-text))
:scope :self))

(defn make-frame []
(frame
:title "Seesaw example"
:content (vertical-panel
:border 2
:items [out-scrollable
in-text])
:on-close :exit))

(defn -main [& args]
(native!)
(value! out-text a-tale)
(attach-listeners!)
(let [f (make-frame)]
(pack! f)
(show! f)))

关于swing - 将简单的 Ltk-app 翻译成 Clojure 跷跷板/ Swing ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com