+--------------------------------------------+
| +-------+ +----------+|
| | +---+ | | +-----+ ||
| | | A | | | | B | ||
| | +---+ | | +-----+ ||
| +-------+ +----------+|
+--------------------------------------------+
^
|
|
Center
背景:I have
- JPanel (FlowLayout.CENTER) 内的 JButton(“A”),大小 50x25
- JPanel (FlowLayout.RIGHT) 内的 JLabel(“B”),大小 100x25
- 两个JPanel在一个JPanel中
期望的结果:I want
- JButton“A”始终水平居中,
- JLabel“B”始终位于右侧。
我尝试过的事情:这些对我不起作用
- BorderLayout 不适合我,因为 JButton“A” 向左移动:
-
我不想在 WEST 上放置一个不可见的组件来撤消转变
+--------------------------------------------+
| +-------+ +----------+|
| | +---+ | | +-----+ ||
| | | A | | | | B | ||
| | +---+ | | +-----+ ||
| +-------+ +----------+|
+--------------------------------------------+
^ ^
| |
| |
| Center
|
Shifted Left
GridLayout 不起作用,因为我不想展开“A”和“B”
感谢任何建议!
p.s.
JButton/JLabels 均位于其自己的 JPanel 内部,因为如果没有 Jpanel,BorderLayout.CENTER 就会将 JButton 扩展到主面板的整个宽度(直至 JLabel 的左边缘)。 JPanel 对于问题的陈述来说不是必需的/关键的
结论:
- 我选择了下面发布的“充满鳗鱼的气垫船”答案。谢谢!
您应该嵌套 JPanel 并使用布局组合。将包含 JButton 的面板放置到另一个使用 GridLayout(1, 0)(1 行,可变列数)的 JPanel 中是可行的,并且将该 JPanel 放置到使用 BorderLayout 的 JPanel 的 BorderLayout.NORTH 位置中也是可行的。
例如
import java.awt.*;
import javax.swing.*;
public class Foo003 {
private static void createAndShowGui() {
JButton btnA = new JButton("A");
JButton btnB = new JButton("B");
btnA.setPreferredSize(new Dimension(50, 25));
btnB.setPreferredSize(new Dimension(100, 25));
JPanel btnAPanel = new JPanel(); // uses default FlowLayout.CENTER
JPanel btnBPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
btnAPanel.add(btnA);
btnBPanel.add(btnB);
JPanel topPanel = new JPanel(new GridLayout(1, 0));
topPanel.add(new JLabel("")); // empty placeholder label
topPanel.add(btnAPanel);
topPanel.add(btnBPanel);
JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(topPanel, BorderLayout.NORTH);
mainPanel.setPreferredSize(new Dimension(400, 300));
JFrame frame = new JFrame("Foo003");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)