2009-10-04 3 views
4

Java Swing의 두 번째 장에서 제안 된대로 AWT에서 Swing으로 프로그램을 변경하려고합니다. 패널에서 JPanel로 변경하면 패널이 사라집니다. 버튼을 JButton으로 바꿀 때도 마찬가지입니다.Swing의 JPanel은 AWT의 Panel과 거의 비슷합니까? 이전 위젯이 표시되지 않습니다.

이름에 여분의 J를 추가하는 것만으로 간단 해 보이기 때문에 버그 인 것 같습니다.하지만 VM이 (Sun JDK)와 함께 어디에 문제가 있는지 잘 모르겠습니다. 내 WM (xmonad) 또는 프로그래밍 방식 (Clojure 's Java Support)을 사용하십시오. 어떤 생각?

앞서 언급했듯이 Clojure (JDK의 경우 lisp와 비슷한 언어)로 작성했습니다.

 
(defn main [] 
    (let [toolbar-frame (Frame. "Toolbar Example (Swing)") 
     cut-button (JButton. "Cut") 
     copy-button (JButton. "Copy") 
     paste-button (JButton. "Paste") 
     java-button (JButton. "Java") 
     windows-button (JButton. "Windows") 
     mac-button (JButton. "Mac") 
     motif-button (JButton. "Motif") 
     lnf-panel (JPanel.) 
     toolbar-panel (Panel.) 
     print-listener (proxy [ActionListener] [] 
      (actionPerformed [evt] 
      (.getActionCommand evt))) 
     ] 
     (.addWindowListener toolbar-frame 
     (proxy [WindowAdapter] [] 
      (windowClosing [e] 
      (System/exit 0)))) 
    ;(doto windows-button (.addActionListener lnf-listener)) 
    ;(doto motif-button (.addActionListener lnf-listener)) 
    ;(doto mac-button (.addActionListener lnf-listener)) 
    ;(doto java-button (.addActionListener lnf-listener)) 
    (doto cut-button (.addActionListener print-listener)) 
    (doto copy-button (.addActionListener print-listener)) 
    (doto paste-button (.addActionListener print-listener)) 
    (doto lnf-panel 
     (.add windows-button) 
     (.add java-button) 
     (.add mac-button) 
     (.add motif-button) 
     (.setLayout (FlowLayout. FlowLayout/LEFT))) 
    (doto toolbar-panel 
     (.add cut-button) 
     (.add copy-button) 
     (.add paste-button) 
     (.setLayout (FlowLayout. FlowLayout/LEFT))) 
    (doto toolbar-frame 
     (.add toolbar-panel BorderLayout/NORTH) 
     (.add lnf-panel BorderLayout/SOUTH) 
     (.setSize 450 250) 
     (.setVisible true)))) 

감사

답변

4

난 당신이 레이아웃을 설정 전에 하위 구성 요소를 추가주의 사항 : 여기 내 코드입니다. 레이아웃을 먼저 설정해보십시오. 레이아웃을 변경할 때 기본 제한 조건 정보가 손실 될 수 있습니다. JPanel이 보이지 않는 경우 자식 요소에 맞게 크기가 자동 조정되지 않았기 때문일 수 있습니다.

프레임에 (.setSize 450 250) 대신 (.pack)도 시도해보십시오.

+0

이상하게도 책에 언급되지 않은 것은 (.pack) 것입니다. 감사! – konr

관련 문제