【发布时间】:2015-01-07 06:53:23
【问题描述】:
如果我将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);
}
}
【问题讨论】:
-
1) 有关在 Swing 中正确处理线程的更多详细信息,请参阅 Concurrency in Swing。特别是关于初始线程的部分。 2)在
f.setVisible(true);之前致电f.pack();
标签: java swing jpanel jlabel grid-layout