JLabel 未在 JPanel 内截断

Sco*_*ick 2 java swing jlabel jpanel grid-layout

如果我将 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 = 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ash*_*Jha 5

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

您需要使用不同的布局来代替FlowLayout适当的调整大小。例如,您可以BorderLayout将标签与 atLINE_START或 一起使用WEST