在Java中,有些字符在沿y轴居中的BoxLayout中对齐似乎存在问题。我不知道是什么原因,我已经创建了一个SSCCE来演示这种效果。在这个例子中,我只使用字符'a',并在每个JPanel的正中间画一条线,以演示每种情况与中心的偏差有多大。加粗文本的情况似乎对齐得很好,但普通格式和斜体都严重偏离中心,尽管使用了setAlignmentX和setHorizontalAlignment。希望能帮助理解这种效果。
如果问题出现在我的电脑上的Java上,这是运行SSCCE时在我的屏幕上显示的图像,其中加载了沿y轴具有BoxLayout的三个不同的JPanels,并在每个JPanel中放置一个仅包含字符'a'的居中JLabel:
![enter image description here](https://istack.dev59.com/t8HYk.webp)
以下是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
names。 - trashgodstyle
名称。感谢您的建议。 - Scott Hetrick