java - JLabel 未在 JPanel 内截断

标签 java swing jpanel jlabel grid-layout

如果我将 JLabel 放在没有严格边界的 JPanel 内,则当 JPanel 大小调整为比文字小。为什么会出现这种情况? JPanel 是否应该意识到没有足够的空间并相应地截断文本,无论其布局如何?

作为示例,我创建了一个带有两行一列的 GridLayoutJFrame 。其中,我在顶部放置了一个带有 FlowLayoutJPanel,在底部放置了一个带有 BoxLayoutJPanel 。每个 JPanel 都包含一个 JLabel

简而言之:为什么顶部的 JLabel 不截断其文本?

用图片来证明我的意思: enter image description here enter image description here

同样,这是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 处的标签一起使用。

关于java - JLabel 未在 JPanel 内截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813939/

相关文章:

java - Unity3D - 构建播放器时出错 : Win32Exception:

java - 如何使用 Selenium Webdriver 从 Angular 应用程序获取所有 WebElement?

使用绘制的 bufferedImage 调整 JFrame 大小时 Java 崩溃

java - 在 Swing 中,如何在没有特定组件的情况下应用 KeyListener

java - 通过平均组合灰度图像

java - 将另一个类中的 JPanel 添加到另一个类中的 JFrame

java - 如何用Java Graphics绘制带边框的三角形

java - 带有提供信息的列表的 JFrame

java - 使用 JPanel 重绘框架

java - 重命名 HDFS 上的文件在本地模式下有效,但在集群模式下无效