Java Isn';t摆动';s JPanel非常像AWT';谁的小组?前者';的小部件没有显示

Java Isn';t摆动';s JPanel非常像AWT';谁的小组?前者';的小部件没有显示,java,swing,clojure,awt,jpanel,Java,Swing,Clojure,Awt,Jpanel,我正在将一个程序从AWT更改为Swing,正如JavaSwing的书的第二章所建议的那样,当我将panel更改为JPanel时,panel就消失了。当我从Button更改为JButton时,情况就不同了 这似乎是一个bug,因为这样做似乎非常简单——只是在名称中添加了一个额外的J——但我不确定问题出在哪里——我的VM(Sun JDK)、WM(xmonad)或我的编程方式(Clojure的Java支持)。有什么想法吗 如前所述,我是用Clojure(JDK的一种类似lisp的语言)编写的。这是我的

我正在将一个程序从AWT更改为Swing,正如JavaSwing的书的第二章所建议的那样,当我将panel更改为JPanel时,panel就消失了。当我从Button更改为JButton时,情况就不同了

这似乎是一个bug,因为这样做似乎非常简单——只是在名称中添加了一个额外的J——但我不确定问题出在哪里——我的VM(Sun JDK)、WM(xmonad)或我的编程方式(Clojure的Java支持)。有什么想法吗

如前所述,我是用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)))) (defn main[] (让[工具栏框架(框架.“工具栏示例(Swing)”) 剪切按钮(JButton.“剪切”) 复制按钮(JButton.“复制”) 粘贴按钮(JButton.“粘贴”) java按钮(JButton.“java”) windows按钮(JButton.“windows”) mac按钮(JButton.“mac”) motif按钮(JButton.“motif”) lnf面板(JPanel.) 工具栏面板(面板) 打印侦听器(代理[ActionListener][] (执行的操作[evt] (.getActionCommand evt))) ] (.addWindowListener工具栏框架) (代理[WindowAdapter][] (e) (系统/出口0))) ;(doto窗口按钮(.addActionListener lnf listener)) ;(doto主题按钮(.addActionListener lnf listener)) ;(doto mac按钮(.addActionListener lnf listener)) ;(doto java按钮(.addActionListener lnf listener)) (doto剪切按钮(.addActionListener打印侦听器)) (点复制按钮(.addActionListener打印侦听器)) (doto粘贴按钮(.addActionListener打印侦听器)) (doto lnf面板 (.添加windows按钮) (.添加java按钮) (.添加mac按钮) (.添加主题按钮) (.setLayout(FlowLayout.FlowLayout/左))) (doto)工具栏面板 (.添加剪切按钮) (.添加复制按钮) (.添加粘贴按钮) (.setLayout(FlowLayout.FlowLayout/左))) (doto工具栏框架) (.添加工具栏面板边框布局/北) (.添加lnf面板边界布局/南) (.设置大小450 250) (.setVisible true)))
谢谢

我注意到您正在设置布局之前添加子组件。首先尝试设置布局。问题可能是更改布局时默认约束信息丢失。如果JPanel不可见,可能是因为它没有自动调整大小以适合其子元素

也可以尝试使用
(.pack)
而不是框架上的
(.setSize 450 250)

奇怪的是,书中没有提到(.pack)这个东西。谢谢