【问题标题】:JLabel not Truncating Within JPanelJLabel 不会在 JPanel 中截断
【发布时间】:2015-01-07 06:53:23
【问题描述】:

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

例如,我创建了一个 JFrame 和一个 GridLayout 两行一列。在那里,我在顶部放置了一个 JPanel 和一个 FlowLayout,并在底部放置了一个 JPanelBoxLayout。每个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);
    }
}

【问题讨论】:

  • 1) 有关在 Swing 中正确处理线程的更多详细信息,请参阅 Concurrency in Swing。特别是关于初始线程的部分。 2)在f.setVisible(true);之前致电f.pack();

标签: java swing jpanel jlabel grid-layout


【解决方案1】:

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

您需要使用不同的布局来代替FlowLayout 以正确调整大小。例如,您可以使用带有LINE_STARTWEST 的标签的BorderLayout

【讨论】:

  • "..标签为LINE_STARTWEST。" 我更喜欢LINE_START,因为它对语言环境敏感。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多