我正在为我正在制作的东西制作一个小测试 GUI。然而,面板的定位会出现问题。
public winInit() {
super("Chatterbox - Login");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(ClassNotFoundException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
} catch (UnsupportedLookAndFeelException e) {
}
setSize(300,135);
pn1 = new JPanel();
pn2 = new JPanel();
pn3 = new JPanel();
l1 = new JLabel("Username");
l2 = new JLabel("Password");
l3 = new JLabel("Random text here");
l4 = new JLabel("Server Address");
l5 = new JLabel("No address set.");
i1 = new JTextField(10);
p1 = new JPasswordField(10);
b1 = new JButton("Connect");
b2 = new JButton("Register");
b3 = new JButton("Set IP");
l4.setBounds(10, 12, getDim(l4).width, getDim(l4).height);
l1.setBounds(10, 35, getDim(l1).width, getDim(l1).height);
l2.setBounds(10, 60, getDim(l2).width, getDim(l2).height);
l3.setBounds(10, 85, getDim(l3).width, getDim(l3).height);
l5.setBounds(l4.getBounds().width + 14, 12, l5.getPreferredSize().width, l5.getPreferredSize().height);
l5.setForeground(Color.gray);
i1.setBounds(getDim(l1).width + 15, 35, getDim(i1).width, getDim(i1).height);
p1.setBounds(getDim(l1).width + 15, 60, getDim(p1).width, getDim(p1).height);
b1.setBounds(getDim(l1).width + getDim(i1).width + 23, 34, getDim(b2).width, getDim(b1).height - 5);
b2.setBounds(getDim(l1).width + getDim(i1).width + 23, 60, getDim(b2).width, getDim(b2).height - 5);
b3.setBounds(getDim(l1).width + getDim(i1).width + 23, 10, etDim(b2).width, getDim(b3).height - 5);
b1.addActionListener(clickButton);
b2.addActionListener(clickButton);
b3.addActionListener(clickButton);
pn1.setLayout(new FlowLayout(FlowLayout.RIGHT));
pn2.setLayout(new FlowLayout(FlowLayout.RIGHT));
pn1.add(l1);
pn1.add(i1);
pn1.add(b1);
pn2.add(l2);
pn2.add(p1);
pn2.add(b2);
add(pn1);
add(pn2);
}
我正在尝试使用 FlowLayout 以所需的方式定位面板。我会在添加时使用 BorderLayout,但是当我只使用彼此最接近的方向时,垂直间距太远了。
此代码的输出是创建一个窗口 300,150,将两个面板中的任何内容放在完全相同的空间中。
是的,我意识到 setBounds() 那里有无用的代码,但这只是我在使用绝对定位,这对我也不起作用。
编辑:
问题解决了……我想。我现在很高兴使用 MiGLayout,但我也看到了 GridBagLayout 所提供的功能。从你们的一些例子来看,这似乎与我想要达到的目标非常相似。
谢谢您的回答。