У меня есть JPanel с менеджером BoxLayout, который содержит подпанели. Я хочу, чтобы компоненты внутри этих подпанелей имели выравнивание по левому краю, но всегда отображались по центру. Похоже, что BoxLayout правильно выравнивает компоненты, которые вставляются напрямую, но не может этого сделать, когда они находятся внутри подпанели.
Я изменил пример из http://www.java2s.com/Tutorial/Java/0240__Swing/YAxisAlignment.htm, поэтому каждая кнопка помещается внутри подпанели, а затем подпанель помещается внутрь главной панели с менеджером BoxLayout:
public class YAxisAlignX {
private static Container makeIt(String title, float alignment) {
String labels[] = { "--", "----", "--------", "------------" };
JPanel container = new JPanel();
container.setBorder(BorderFactory.createTitledBorder(title));
BoxLayout layout = new BoxLayout(container, BoxLayout.Y_AXIS);
container.setLayout(layout);
// modified loop. the original version does not create JPanel pan.
// adds the buttons directly the the JPanel container with the
// BoxLayout
for (int i = 0, n = labels.length; i < n; i++) {
JPanel pan = new JPanel();
JButton button = new JButton(labels[i]);
pan.add(button);
button.setAlignmentX(alignment);
pan.setAlignmentX(alignment);
container.add(pan);
}
return container;
}
public static void main(String args[]) {
JFrame frame = new JFrame("Alignment Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container panel1 = makeIt("Left", Component.LEFT_ALIGNMENT);
Container panel2 = makeIt("Center", Component.CENTER_ALIGNMENT);
Container panel3 = makeIt("Right", Component.RIGHT_ALIGNMENT);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(panel1);
contentPane.add(panel2);
contentPane.add(panel3);
frame.pack();
frame.setVisible(true);
}
}
Если вы запустите эту версию, вы увидите, что все кнопки расположены по центру, несмотря на установленное выравнивание. Почему это происходит? Есть ли решение? В моем случае каждая подпанель содержит несколько компонентов, и я не хочу добавлять их прямо в основную панель.
Спасибо большое.