2

Clojure、Java、および関数型プログラミングは初めてです。GUI 用の SeeSaw を使い始めて、大好きになりました。Dave Rayの例を使用して、ウィジェットを作成します。

(defrecord Col-definition [id col-name col-position])

関連する関数を使用して、コンボボックス、ラベル、およびテキストボックスを作成します。特に使用するのは次のextend-typeとおりです。

(extend-type Col-definition  
  MakeWidget 
  (make-widget* [col-definition] 
    (mig-panel 
      :constraints ["", "[][grow]"]
      :border [(line-border :thickness 1) 2]

      :items [["Column Name"        "gap 10"]
              ;;[(col-name-field (:id col-definition) col-definition :col-name)  "growx, wrap"]
              [(:col-name col-definition) "growx, wrap"]
              ["Ordinal Position" "gap 10"]
              [(col-name-field (:id col-definition) col-definition :col-position)  "growx"]])))

defrecordウィジェットは、次のように画面領域に関連付けられたのインスタンスを介して構築されます。

(def second-combocoll '("Col0" "Col1" "Col2"))
(def second-bottom (vertical-panel :items (vec (col-defs second-combocoll))))
(def areabottom second-bottom)

areabottom不動産の分割エリアです。それはすべてうまくいきます。

しかし、データベースから読み込み、ウィジェットをコンボボックスの新しいコレクションに動的に置き換えたいと考えています。

ウィジェットを削除できないようです。(remove! areabottom second-combocol)または (replace! areabottom new-combocol)、他の巧妙なアイデアがすべて無駄になりました。

ここで質問があります: トリガーされたイベント (ファイル パスをクリックしてロードするなど) の後で、カスタム ウィジェットを置換または削除するにはどうすればよいですか?

4

2 に答える 2

1

これを投稿してからしばらく経ちました。数分前にこの投稿を見たのは、私がreplace!期待したことをしないという同じ問題を抱えていたからです。を続けるのでreplace!はなく、代わりに のようなものを使用しました(do (config! my-container :items (build-new-items)) (repaint! my-container))。それでもコードを整理したい場合は、これを試してみてください。

于 2015-06-30T01:36:00.747 に答える