4

我正在将程序从 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 面板 (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))))

谢谢

4

1 回答 1

4

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

也可以试试(.pack),而不是(.setSize 450 250)放在框架上。

于 2009-10-04T01:59:59.097 回答