Я пытаюсь выровнять ряд элементов по вертикальной оси в центре панели, и BoxLayout кажется именно тем, что мне нужно. Однако кажется странным, когда все добавляемые элементы имеют нечетную ширину.
Вот SSCCE, демонстрирующий это странное поведение:
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.JFrame;
import javax.swing.Box;
import javax.swing.JComponent;
import javax.swing.BoxLayout;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Component;
public class BoxBug {
public static void main(String[] args){
UIManager.put("swing.boldMetal", Boolean.FALSE);
SwingUtilities.invokeLater(new Runnable(){
public void run(){
gui();
}
});
}
public static void gui(){
JFrame f = new JFrame("Title");
Box b = new Box(BoxLayout.Y_AXIS);
JComponent c = new JComponent(){
public void paint(Graphics g){
g.setColor(new Color(255, 0, 0));
g.fillRect(0, 0, getWidth(), getHeight());
}
// just change the first argument here
// (even numbers work fine, odd ones fail)
private Dimension p = new Dimension(3, 20);
public Dimension getPreferredSize(){return p;}
public Dimension getMinimumSize(){return p;}
public Dimension getMaximumSize(){return p;}
};
c.setAlignmentX(Component.CENTER_ALIGNMENT);
b.add(c);
f.add(b);
f.pack();
f.setVisible(true);
}
}
Вот как это выглядит:
Когда я изменяю ширину JComponent с 3 на 4, он отлично работает:
Затем снова происходит сбой, когда я изменяю ширину на 5:
Я искал эту проблему в Google и StackOverflow, но не нашел никакой документации по этому вопросу, поэтому мне кажется, что это ошибка.
Если это ошибка, может ли кто-нибудь найти хак, чтобы обойти ее?