JLabel 不在 JPanel 中截断

JLabel not Truncating Within JPanel

如果我将 JLabel 放在没有严格边界的 JPanel 内部,当 JPanel 的大小小于文本时,它不会截断文本。为什么会这样? JPanel 不应该意识到没有足够的空间并相应地截断文本,而不管其布局如何?

例如,我创建了一个 JFrame 和一个两行一列的 GridLayout。在那里,我在顶部放置了一个 JPanel 和一个 FlowLayout,在底部放置了一个 JPanel 和一个 BoxLayout。每个 JPanel 包含一个 JLabel.

简而言之:为什么顶部的 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 = new JLabel("However, this JLabel, on the other hand, will become truncated.");
        f.setLayout(new GridLayout(2,1));
        f.setBackground(Color.BLACK);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(panel);
            panel.setBackground(Color.WHITE);
            panel.add(label);
        f.add(label2);
            label2.setHorizontalAlignment(JLabel.CENTER);
            label2.setForeground(Color.WHITE);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

FlowLayout 不会调整其中组件的大小。它显示了具有首选大小的组件。

您需要使用不同的布局来代替 FlowLayout 以正确调整大小。例如,您可以将 BorderLayoutLINE_STARTWEST.

处的标签一起使用