2016-04-27 8 views
0

ユーザーがタイトルとブログを入力して送信するラケットプログラム用のGUIを作成しています。これは、これまでにこれらのフィールドのために私のコードです:ラケットのGUIテキストフィールドとボタンを整列する方法

enter image description here

しかし、私はブログのフィールドの上にあることと、提出するタイトルテキストボックスを希望:

(define blogPost% 
    (class horizontal-panel% 
    (super-new) 
    (define titleoutput (new text-field% (label " title") 
          (min-height 20) 
          (min-width 200) 
          (vert-margin 20) 
          (horiz-margin 10) 
          (parent this))) 
    (define output (new text-field% (label "blog") 
         (style '(multiple)) 
         (min-height 20) 
         (vert-margin 20) 
         (min-width 400) 
         (parent this))) 
    (define (callback button event) 
     (define title-new-value (send titleoutput get-value)) 
     (define new-value (send output get-value)) 
     (save title-new-value new-value) 
     (send output set-value "") 
     (send titleoutput set-value "") 
     (send howisit show #t)) 
    (define button (new button% (label "Submit") 
         (vert-margin 0) 
         (horiz-margin 10) 
         (parent this) 
         (callback callback))) 
    )) 

それが現在のように整列されますボタンを中央に配置します。

+0

'save'と' howisit'とは何ですか?私はバインドされていない識別子エラーを取得しています。完全な例としてコンパイルするように、 ''(タイトル本体を保存する(printf "〜v:n:タイトル本体))'のようなダミーの実装を最低限にすると便利です。 –

答えて

2

your previous questionと同じ方法でこのコードを実行していることを前提としています。その中で、あなたはこのようなあなたのクラスを使用する:あなたはhorizontal-panel%のサブクラスとしてblogPost%を定義したので、今

(define f (new frame% [label "blog post GUI"] [min-width 400] [min-height 500])) 

(define tib (new blogPost% 
       [parent f])) 

(send f show #t) 

、それはまた、alignment引数を含むhorizontal-panel%の初期化引数のすべてを継承します。つまり、あなたのblogPost%クラスに[alignment '(left top)]初期化引数を渡すことができます。

(define f (new frame% [label "blog post GUI"] [min-width 400] [min-height 500])) 

(define tib (new blogPost% 
       [parent f] 
       [alignment '(left top)])) 

(send f show #t) 

あなたblogPost%クラスにこのデフォルトを構築したい場合は、あなたの代わりに(super-new)フォームに追加できます。

(define blogPost% 
    (class horizontal-panel% 
    (super-new [alignment '(left top)]) 
    ...)) 

しかし、場合によっては別の場所に(new blogPost% ... [alignment '(left top)] ...)がある場合、このコードを破ると思います。

だからそれを避けるために、それはおそらく代わりにhorizontal-panel%であることの、それはそれはすでに2を持っているのと同じように、horizontal-panel%だろうように、それは自分のクラスのblogPost%クラスを作るのがベストだろうテキストフィールドとボタンがあります。

あなたは(以前super-newで暗黙的だった)horizontal-panel%に渡された初期化引数を変更する場合は、この変更後、blogPost%を使用するコードが中断されませんので、これは長期的に優れています。

(define blogPost% 
    (class object% ; object% instead of horizontal-panel% 
    ; This argument is explicit now. 
    ; If other code relies on other arguments, specify them here. 
    (init parent) 
    (super-new) 
    (define panel 
     (new horizontal-panel% ; this new call is explicit now 
      [parent parent] ; you can later add more arguments 
      [alignment '(left top)])) ; and it won't break things 
    (define titleoutput 
     (new text-field% 
      [label " title"] 
      [min-height 20] 
      [min-width 200] 
      [vert-margin 20] 
      [horiz-margin 10] 
      [parent panel])) ; panel instead of this 
    (define output 
     (new text-field% 
      [label "blog"] 
      [style '(multiple)] 
      [min-height 20] 
      [vert-margin 20] 
      [min-width 400] 
      [parent panel])) ; panel instead of this 
    (define (callback button event) 
     (define title-new-value (send titleoutput get-value)) 
     (define new-value (send output get-value)) 
     (save title-new-value new-value) 
     (send output set-value "") 
     (send titleoutput set-value "") 
     (send howisit show #t)) 
    (define button 
     (new button% 
      [label "Submit"] 
      [vert-margin 0] 
      [horiz-margin 10] 
      [parent panel] ; panel instead of this 
      [callback callback])) 
    )) 

(define f (new frame% [label "blog post GUI"] [min-width 400] [min-height 500])) 

(define tib (new blogPost% 
       [parent f])) 

(send f show #t) 

はもちろん、この方法では、あなたのblogPost%クラスのインスタンスにhorizontal-panel%ために定義されたメソッドを使用することはできませんが、長期的には良いことも同様だという。将来的にhorizontal-panel%以外のものを使用するように実装を変更したい場合は、可能です。

+0

ありがとうございます!これはまさに私が必要なものです! –

+0

また、私の保存機能は、変数をデータベースに保存しますが、実際にGUIでは必要ありません。あなたがしたことは素晴らしい作品です! –

+0

私はちょうどあなたがゆるいカップリングをどれくらい理解していますか? –

関連する問題