Опитвам се да подравня редица елементи по вертикална ос в центъра на панел и 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 за този проблем, но не намерих никаква документация за това, така че ми изглежда като грешка.
Ако това е бъг, може ли някой да намери хак, за да го заобиколи?