Swing 的 JPanel 不是很像 AWT 的 Panel 吗?前者的小部件未显示
Posted
技术标签:
【中文标题】Swing 的 JPanel 不是很像 AWT 的 Panel 吗?前者的小部件未显示【英文标题】:Isn't Swing's JPanel pretty much like AWT's Panel? The former's widget is not showing up 【发布时间】:2010-12-03 16:12:49 【问题描述】:我正在将程序从 AWT 更改为 Swing,正如 Java Swing 书的第二章所建议的那样,当我从 Panel 更改为 JPanel 时,面板就消失了。当我从 Button 更改为 JButton 时,同样的情况不会发生。
这似乎是一个错误,因为这样做似乎非常简单 - 只需在名称中添加一个额外的 J - 但我不确定问题出在哪里 - 使用我的 VM(Sun JDK),使用我的 WM (xmonad) 或我的编程方式(Clojure 的 Java 支持)。有什么想法吗?
如前所述,我使用 Clojure(JDK 的一种类似 lisp 的语言)编写它。这是我的代码:
(定义主要 [] (let [toolbar-frame(Frame."Toolbar Example (Swing)") 剪切按钮(JButton。“剪切”) 复制按钮(JButton。“复制”) 粘贴按钮(JButton。“粘贴”) java 按钮(JButton。“Java”) 窗口按钮(JButton。“Windows”) mac 按钮(JButton。“Mac”) 主题按钮(JButton。“主题”) lnf-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 cut-button (.addActionListener print-listener)) (doto 复制按钮(.addActionListener 打印监听器)) (doto paste-button (.addActionListener print-listener)) (doto lnf-面板 (。添加窗口按钮) (.add java-button) (.add mac 按钮) (.add 主题按钮) (.setLayout (FlowLayout.FlowLayout/LEFT))) (doto 工具栏面板 (.add 剪切按钮) (.add 复制按钮) (。添加粘贴按钮) (.setLayout (FlowLayout.FlowLayout/LEFT))) (doto 工具栏框架 (.add 工具栏面板 BorderLayout/NORTH) (.add lnf-panel BorderLayout/SOUTH) (.setSize 450 250) (.setVisible true))))谢谢
【问题讨论】:
【参考方案1】:我注意到您在设置布局之前添加子组件。尝试先设置布局。问题可能是在更改布局时会丢失默认约束信息。如果 JPanel 不可见,可能是因为它没有自动调整大小以适合其子元素。
还可以尝试在框架上使用(.pack)
而不是(.setSize 450 250)
。
【讨论】:
这是(.pack)的东西,奇怪的是,书中没有提到。谢谢!以上是关于Swing 的 JPanel 不是很像 AWT 的 Panel 吗?前者的小部件未显示的主要内容,如果未能解决你的问题,请参考以下文章
java在线聊天项目0.2版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包) BorderLayout布局与GridLayout布局不同之处 JPanel设置大小(示