【发布时间】:2011-12-12 16:52:00
【问题描述】:
+--------------------------------------------+
| +-------+ +----------+|
| | +---+ | | +-----+ ||
| | | A | | | | B | ||
| | +---+ | | +-----+ ||
| +-------+ +----------+|
+--------------------------------------------+
^
|
|
Center
背景:我有
- 一个 JButton ("A"),大小 50x25,在 JPanel (FlowLayout.CENTER) 内
- 一个 JLabel ("B"),大小 100x25,在 JPanel (FlowLayout.RIGHT) 内
- 两个 JPanel 在一个 JPanel 中
想要的结果:我想要
- JButton“A”总是水平居中,
- JLabel “B”始终与右侧齐平。
我尝试过的事情:这些对我不起作用
- BorderLayout 不适合我,因为 JButton“A”向左移动:
-
我不希望在 WEST 中放置一个不可见的组件来撤消转移
+--------------------------------------------+ | +-------+ +----------+| | | +---+ | | +-----+ || | | | A | | | | B | || | | +---+ | | +-----+ || | +-------+ +----------+| +--------------------------------------------+ ^ ^ | | | | | Center | Shifted Left GridLayout 不起作用,因为我不想展开“A”和“B”
感谢任何建议!
附言
每个 JButton/JLabel 都在它们自己的 JPanel 内部,因为没有 Jpanel,BorderLayout.CENTER 会将 JButton 扩展到主面板的整个宽度(直到 JLabel 的左边缘)。 JPanel 不需要/对问题的陈述至关重要
结论:
- 我选择了下面发布的“充满鳗鱼的气垫船”答案。谢谢!
【问题讨论】:
-
永远不要明确设置任何组件的大小,这已经在这里重复了无数次!
-
你为什么要把你的每个
JButton和JLabel放到他们自己的“私人”JPanels中,这样做有什么理由吗? -
除非按钮不包含文本,否则你怎么知道它需要 100x25(不小于,不,更重要的是大于)。标签也是如此。
-
“你看到了吗?” 不,我没看到……在 Mac 上。或 *nix,因为这些东西只针对一个操作系统。 Java 布局的重点是它们足够健壮,可以处理不同的平台、PLAF、屏幕尺寸、分辨率……哦,忘记平台布局“holiwar”——Java 是不可知的。 ;)
-
@Vlad:我不知道你的陈述“证明”了 WPF 的布局更好,而只是在这个例子中它们更简单。即使它们对于所有用途都更简单,但简单性只是一个因素;我们不知道它们的功能或可扩展性。
标签: java swing layout alignment