正如Java Swing本书第二章所建议的那样,我正在将程序从AWT更改为Swing,当我从Panel更改为JPanel时,面板消失了。当我从Button更改为JButton时,不会发生相同的情况。

这似乎是一个错误,因为这样做似乎很简单-只需在名称中添加一个额外的J-但我不确定问题出在哪里-我的VM(Sun JDK),我的WM( xmonad)或我编程的方式(Clojure的Java支持)。任何想法?

如前所述,我是用Clojure(JDK的一种类似Lisp的语言)编写的。这是我的代码:

(defn main []
(让[toolbar-frame(框架。“Toolbar示例(Swing)””))
剪切按钮(JButton。“剪切”)
复制按钮(JButton。“复制”)
粘贴按钮(JButton。“粘贴”)
java-button(JButton。“Java”)
Windows按钮(JButton。“Windows”)
mac-button(JButton。“Mac”)
图案按钮(JButton。“主题”)
INF-PANEL(JPanel。)
工具栏面板(面板)。
打印侦听器(代理[ActionListener] []
(actionPerformed [evt]
(.getActionCommand evt)))
]
(.addWindowListener工具栏框架
(代理[WindowAdapter] []
(windowClosing [e]
(系统/出口0))))
;(doto windows-button(.addActionListener lnf-listener))
;(doto主题按钮(.addActionListener lnf-listener))
;(doto mac-button(.addActionListener lnf-listener))
;(doto java-button(.addActionListener lnf-listener))
(doto剪切按钮(.addActionListener打印侦听器))
(doto复制按钮(.addActionListener打印侦听器))
(doto粘贴按钮(.addActionListener打印侦听器))
(doto INF-panel
(。添加Windows按钮)
(.add java-button)
(。添加mac-按钮)
(。添加主题按钮)
(.setLayout(FlowLayout。FlowLayout / LEFT)))
(doto工具栏面板
(。添加剪切按钮)
(。添加复制按钮)
(。添加粘贴按钮)
(.setLayout(FlowLayout。FlowLayout / LEFT)))
(doto工具栏框架
(.add工具栏面板BorderLayout / NORTH)
(.add lnf-panel BorderLayout / SOUTH)
(.setSize 450250)
(.setVisible true))))

谢谢

最佳答案

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

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

07-24 09:48