Кажется, что проблема связана с выравниванием определенных символов в центре BoxLayout вдоль оси y в Java. Я не знаю, что может вызвать это, & Я создал SSCCE, чтобы продемонстрировать эффект. В примере я использую только символ «a», & Я рисую линию вниз по прямой середине каждого JPanel, чтобы продемонстрировать, насколько далеко от каждого случая находится центр. Случай с полужирным шрифтом кажется строгим, но нормальное форматирование & курсивом, как сильно заостренным, несмотря на использование setAlignmentX & setHorizontalAlignment. Любая помощь в понимании этого эффекта приветствуется.Выравнивание одиночных символов в Java BoxLayout на оси Y вне центра
В случае, если проблема связана с Java на моем конкретном компьютере, это изображение того, что отображается на моем экране при запуске SSCCE, который загружает три разных JPanel с помощью BoxLayouts по оси y. & ставит в центре JLabel только с символом «а» в каждой:
& вот код SSCCE:
import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
public class AlignmentTest extends JPanel
{
public AlignmentTest(char label, int style)
{
JLabel l = new JLabel(Character.toString(label));
setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
setBackground(Color.WHITE);
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
setPreferredSize(new Dimension(300,50));
add(Box.createVerticalGlue());
add(l);
l.setFont(l.getFont().deriveFont(style));
l.setAlignmentX(CENTER_ALIGNMENT);
l.setHorizontalAlignment(JLabel.CENTER);
add(Box.createVerticalGlue());
}
public static void main(String[] args)
{
JFrame f = new JFrame("Alignment Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridLayout(1,0,5,5));
f.add(new AlignmentTest('a',Font.PLAIN));
f.add(new AlignmentTest('a',Font.BOLD));
f.add(new AlignmentTest('a',Font.ITALIC));
f.pack();
f.setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(getWidth()/2,0,getWidth()/2,getHeight());
}
}
Для ясности, используйте 'style' [имена] (http://docs.oracle.com/javase/8/docs/api/constant-values.html#java. awt.Font.BOLD). – trashgod
Хорошо, я об этом не думал. Я изменил код, чтобы использовать имена 'style'. Спасибо за вход. –