如果我将 JLabel
放在没有严格边界的 JPanel
内,则当 JPanel
大小调整为比文字小。为什么会出现这种情况? JPanel
是否应该意识到没有足够的空间并相应地截断文本,无论其布局如何?
作为示例,我创建了一个带有两行一列的 GridLayout
的 JFrame
。其中,我在顶部放置了一个带有 FlowLayout
的 JPanel
,在底部放置了一个带有 BoxLayout
的 JPanel
。每个 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
才能正确调整大小。例如,您可以将 BorderLayout
与 LINE_START
或 WEST
处的标签一起使用。
关于java - JLabel 未在 JPanel 内截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813939/