2011-07-13 53 views
1

我正在寫一個小的應用程序,我想絕對定位 - 我可以得到我想要看似醜陋的解決辦法,但是我想知道我怎樣才能使這個代碼更清潔保持相同功能。的Clojure +迴旋絕對定位問題

問題是如果我省略或者(.setBounds ..)S-exprs然後JPanel中充滿整個的JFrame。在此先感謝,這裏是工作示例代碼:

... 
(:import [javax.swing JFrame JPanel] 
     [javax.swing.border LineBorder] 
     [java.awt Color]) 

(defn frame [] 
    (let [top-panel (doto (JPanel.) 
        (.setOpaque true) 
        (.setVisible true) 
        (.setBounds 25 25 250 75) 
        (.setBorder (LineBorder. (Color. 255 0 0 255)))) 

     frame (doto (JFrame.) 
       (.setLayout nil) 
       (.setResizable false) 
       (.setSize 300 625) 
       (.setVisible true) 
       (.setContentPane top-panel))] 

    (.setBounds top-panel 25 25 250 75))) 
+1

更換.contentPane有沒有在上市一個錯字?你正在定義一個名爲「frame」的函數和一個叫做「frame」的本地函數。這是你的意圖嗎? – clartaq

+0

@clartaq我沒有看到任何問題。 – amalloy

+1

@amalloy:是的,沒錯。只是想知道這種行爲是否存在混淆。 – clartaq

回答

2

此代碼給我我一直在尋找的功能,用。新增

(defn frame [] 
    (let [top-panel (doto (JPanel.) 
        (.setBounds 25 25 250 75) 
        (.setVisible true) 
        (.setBorder (LineBorder. (Color. 255 0 0 255))))] 

     (doto (JFrame.) 
      (.setLayout nil) 
      (.setSize 300 625) 
      (.setVisible true) 
      (.add top-panel))) 
0

嗯......我無法讓您的代碼工作。當我使用mod來讓它運行時,我將面板緊緊包裹在框架中。

我假設你想在與各方空的空間較大框架中間的頂部面板。通常的做法是用你想要的框架大小創建一個主面板。然後,使用像BorderLayout這樣的佈局管理器,將其他JPanel添加到主面板。頂部面板將被給予你想要的尺寸,周圍的面板將提供「填充」。如果周圍面板是用空白邊框創建的,它應該看起來像頂部面板被空白區域包圍。

編輯

這裏的東西,可能是有點接近你的意圖。 BorderLayout可能不會提供所需的面板大小優先級。也許GridBagLayout?

(ns com.so.abspos 
(:import (javax.swing JFrame JPanel) 
     (java.awt BorderLayout)) 
(:gen-class true)) 

(defn frame [] 
    (let [ 
    center-panel (doto (JPanel.) 
     (.setOpaque true) 
     (.setVisible true) 
     (.setSize 225 50) 
     ;(.setBounds 25 25 250 75) 
     (.setBorder (javax.swing.border.LineBorder. (java.awt.Color. 255 0 0 255)))) 

    top-panel (doto (JPanel.) 
     (.setSize 625 25)) 

    left-panel (doto (JPanel.) 
     (.setSize 25 75)) 

    bottom-panel (doto (JPanel.) 
     (.setSize 625 300)) 

    right-panel (doto (JPanel.) 
     (.setSize 250 75)) 

    main-panel (doto (JPanel.) 
     (.setLayout (new BorderLayout)) 
     (.add left-panel BorderLayout/WEST) 
     (.add top-panel BorderLayout/NORTH) 
     (.add center-panel BorderLayout/CENTER) 
     (.add right-panel BorderLayout/EAST) 
     (.add bottom-panel BorderLayout/SOUTH)) 

    aframe (doto (JFrame.) 
     (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE) 
     (.setResizable false) 
     (.setSize 300 625) 
     (.setVisible true) 
     (.setContentPane main-panel))])) 

(defn -main 
    "Just create the frame and show it." 
    [] 
    (frame)) 
+0

感謝投入這項努力,我開始閱讀一本書上搖擺,我認爲這個問題與.contentPane搞亂時,我應該一直在使用。新增,我會後下面的代碼 – ChrisR