在Java中沿y轴将某些字符对齐到BoxLayout的中心似乎存在问题.我不知道是什么导致这种情况,我已经创建了一个SSCCE来证明这种效果.在这个例子中,我只使用了字符'a',我在每个JPanel的正中间画一条线来演示每个案例离中心有多远.粗体文本的情况似乎很好,但正常的格式和斜体都非常偏离中心,尽管同时使用了setAlignmentX和setHorizontalAlignment.任何帮助理解这种效果的人都表示赞赏.
在我的特定计算机上以某种方式出现问题的情况下,这是我运行SSCCE时屏幕上显示的内容的图像,SSCCE沿着y轴加载三个不同的带有BoxLayouts的JPanel并仅放置一个居中的JLabel每个角色'a':

这是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());
}
}
Run Code Online (Sandbox Code Playgroud) 如果我将 aJLabel放在JPanel没有严格边界的内部,则当 a 的JPanel大小小于文本时,它不会截断文本。为什么会发生这种情况?不应该JPanel意识到没有足够的空间并相应地截断文本,无论其布局如何?
例如,我创建了JFrame一个GridLayout带有两行和一列的 。在那,我在顶部放置了一个,在底部放置了JPanel一个。每个包含一个.FlowLayoutJPanelBoxLayoutJPanelJLabel
简而言之:为什么JLabel顶部的不截断其文本?
图像来证明我的意思:

同样,这是 SSCCE 来演示效果:
import javax.swing.*;
import java.awt.*;
public class TruncationTest1
{
public static void main(String[] args)
{
JFrame f = new JFrame("Truncation Test");
JPanel panel = new JPanel(); //Default layout, aka FlowLayout
JLabel label = new JLabel("Try resizing the frame: This will not be truncated for some reason.");
JLabel label2 = …Run Code Online (Sandbox Code Playgroud)