我正在编写一个小应用程序,我想要绝对定位 - 我可以得到我想要的看似丑陋的解决方法,但是我想知道如何使代码更清晰,保持相同的功能。
问题是如果我省略(.setBounds ..)s-exprs,那么JPanel会填充整个JFrame。在此先感谢,这是工作示例代码:
...
(:import [javax.swing JFrame JPanel]
[javax.swing.border LineBorder]
[java.awt Color])
(defn frame []
(let [top-panel (doto (JPanel.)
(.setOpaque true)
(.setVisible true)
(.setBounds 25 25 250 75)
(.setBorder (LineBorder. (Color. 255 0 0 255))))
frame (doto (JFrame.)
(.setLayout nil)
(.setResizable false)
(.setSize 300 625)
(.setVisible true)
(.setContentPane top-panel))]
(.setBounds top-panel 25 25 250 75)))
答案 0 :(得分:2)
此代码为我提供了我正在寻找的功能,将.contentPane替换为.add
(defn frame []
(let [top-panel (doto (JPanel.)
(.setBounds 25 25 250 75)
(.setVisible true)
(.setBorder (LineBorder. (Color. 255 0 0 255))))]
(doto (JFrame.)
(.setLayout nil)
(.setSize 300 625)
(.setVisible true)
(.add top-panel)))
答案 1 :(得分:0)
嗯......我无法让你的代码工作。当我制作模组以使其运行时,我将面板紧紧地包裹在框架中。
我假设您希望顶部面板位于较大框架的中间,并且四周都有空白空间。通常的方法是创建一个具有所需框架大小的主面板。然后,使用像BorderLayout这样的布局管理器,将其他JPanel添加到主面板。顶部面板将给出您想要的尺寸,周围的面板将提供“填充”。如果使用空边框创建周围的面板,它应该看起来像顶部面板被空白区域包围。
修改强>:
这可能会更接近你的意图。 BorderLayout可能没有给出你想要的面板大小优先级。也许是GridBagLayout?
(ns com.so.abspos
(:import (javax.swing JFrame JPanel)
(java.awt BorderLayout))
(:gen-class true))
(defn frame []
(let [
center-panel (doto (JPanel.)
(.setOpaque true)
(.setVisible true)
(.setSize 225 50)
;(.setBounds 25 25 250 75)
(.setBorder (javax.swing.border.LineBorder. (java.awt.Color. 255 0 0 255))))
top-panel (doto (JPanel.)
(.setSize 625 25))
left-panel (doto (JPanel.)
(.setSize 25 75))
bottom-panel (doto (JPanel.)
(.setSize 625 300))
right-panel (doto (JPanel.)
(.setSize 250 75))
main-panel (doto (JPanel.)
(.setLayout (new BorderLayout))
(.add left-panel BorderLayout/WEST)
(.add top-panel BorderLayout/NORTH)
(.add center-panel BorderLayout/CENTER)
(.add right-panel BorderLayout/EAST)
(.add bottom-panel BorderLayout/SOUTH))
aframe (doto (JFrame.)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.setResizable false)
(.setSize 300 625)
(.setVisible true)
(.setContentPane main-panel))]))
(defn -main
"Just create the frame and show it."
[]
(frame))