JLabel 不在 JPanel 中截断
JLabel not Truncating Within JPanel
如果我将 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);
}
}
FlowLayout
不会调整其中组件的大小。它显示了具有首选大小的组件。
您需要使用不同的布局来代替 FlowLayout
以正确调整大小。例如,您可以将 BorderLayout
与 LINE_START
或 WEST
.
处的标签一起使用
如果我将 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);
}
}
FlowLayout
不会调整其中组件的大小。它显示了具有首选大小的组件。
您需要使用不同的布局来代替 FlowLayout
以正确调整大小。例如,您可以将 BorderLayout
与 LINE_START
或 WEST
.