私が作っているものの小さなテスト 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 を作成し、2 つのパネルにあるものをまったく同じスペースに配置することです。
はい、setBounds() には役に立たないコードがあることに気付きましたが、それは私が絶対位置指定をいじっただけで、うまくいきませんでした。
編集:
質問は解決しました...と思います。私は現在、MiGLayout を使用して非常に満足していますが、GridBagLayout が提供するものも見ています。あなたたちの例のいくつかから見ると、それは私が達成しようとしているものと非常に似ているようです.
回答ありがとうございます。