あなたはFlowLayoutのアイデアを使用して、まだラベル/テキストフィールドのラインナップを作ることができます。最も長いラベルのサイズである各キー/値パネルにストラットを追加して、各パネルのテキストフィールドを同じ量だけ右に押し出します。以下のような何か:
import java.awt.*;
import javax.swing.*;
public class Test implements Runnable
{
private String[] keys = {"One", "Twoooooo", "Three", "Four",
"Five", "Six", "Seven", "Eight",
"Nine", "Ten", "Eleven", "Twelve"};
private String[] values = {"Apple", "Boy", "Cat", "Denmark",
"Elephant", "Foo", "Hello", "Igloo",
"Jug", "Kangaroo", "Lip", "Now"};
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Test());
}
public void run()
{
JPanel panel = new JPanel(new FlowLayout());
GridBagConstraints gbc;
JTextField textField = null;
int maxWidth = 0;
JLabel[] labels = new JLabel[keys.length];
for (int i = 0; i < keys.length; i++)
{
labels[i] = new JLabel(keys[i]);
maxWidth = Math.max(labels[i].getPreferredSize().width, maxWidth);
}
JPanel[] panels = new JPanel[keys.length];
for (int i = 0; i < keys.length; i++)
{
panels[i] = new JPanel(new GridBagLayout());
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
gbc.insets = new Insets(1,1,1,1);
panels[i].add(Box.createHorizontalStrut(maxWidth), gbc);
gbc.gridy = 1;
panels[i].add(labels[i], gbc);
textField = new JTextField(10);
textField.setText(values[i]);
gbc.gridx = 1;
panels[i].add(textField, gbc);
panel.add(panels[i]);
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.setSize(240, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
1)余分な幅/高さと、それは最小サイズで表示されなければならないとして、GUI(サイズ変更可能ならば)のASCIIアートを提供します。 2)*レイアウトを組み合わせて必要なレイアウトを作成する方法については、[ネストされたレイアウトの例](http://stackoverflow.com/a/5630271/418556)を参照してください。 –
@Andrew Thompson私が質問で示した例は、レイアウトを組み合わせた例でした。 –
[この回答](http://stackoverflow.com/a/16353404/418556)のように 'GroupLayout'を使用することができます。他の解決策 'GroupLayout'がありますが、それを最初に見てください。 –