82

我有JLabel一个容器。字体的默认大小非常小。我希望 的文本JLabel采用最大尺寸。

我怎样才能做到这一点?

4

7 回答 7

115
label = new JLabel("A label");
label.setFont(new Font("Serif", Font.PLAIN, 14));

取自如何在 Swing 组件中使用 HTML

于 2010-04-26T16:33:26.610 回答
86

JLabel不是最漂亮的代码,但以下代码将为调用选择适当的字体大小,以便label内部文本尽可能适合内部而不会溢出标签:

Font labelFont = label.getFont();
String labelText = label.getText();

int stringWidth = label.getFontMetrics(labelFont).stringWidth(labelText);
int componentWidth = label.getWidth();

// Find out how much the font can grow in width.
double widthRatio = (double)componentWidth / (double)stringWidth;

int newFontSize = (int)(labelFont.getSize() * widthRatio);
int componentHeight = label.getHeight();

// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);

// Set the label's font size to the newly determined size.
label.setFont(new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse));

JLabel基本上,代码通过使用对象查看文本占用了多少空间FontMetrics,然后使用该信息来确定可以使用的最大字体大小,而不会溢出JLabel.

上面的代码可以插入到保存 的paint方法中,或者在需要更改字体大小时调用的某些方法中。JFrameJLabel

以下是上述代码的截图:

替代文字
(来源:coobird.net

于 2010-04-26T16:57:44.330 回答
10
 JLabel textLabel = new JLabel("<html><span style='font-size:20px'>"+Text+"</span></html>");
于 2014-08-31T19:03:56.123 回答
6
JLabel label = new JLabel("Hello World");
label.setFont(new Font("Calibri", Font.BOLD, 20));
于 2020-01-27T09:31:35.020 回答
4

标签的源代码 - 如何更改颜色和字体(在 Netbeans 中)

jLabel1.setFont(new Font("Serif", Font.BOLD, 12));


jLabel1.setForeground(Color.GREEN);
于 2015-03-19T15:22:51.910 回答
2

只是想指出接受的答案有几个限制(我在尝试使用它时发现)

  1. 正如所写,它实际上一直在根据先前字体大小的比率重新计算字体大小……因此,在几次调用之后,它就使字体大小变得太大了。(例如,从 12 磅开始作为您的设计字体,将标签扩大 1 个像素,发布的代码将计算字体大小为 12 *(例如)1.2(字段空间与文本的比率)= 14.4 或 14 磅字体。再 1 个 Pixel 和电话,你就在 16 点!)。

因此,它不适合(没有调整)用于重复呼叫设置(例如ComponentResizedListener,a 或 custom/modified LayoutManager)。

列出的代码有效地假定起始大小为 10 pt,但引用当前字体大小,因此适合调用一次(在创建标签时设置字体大小)。如果这样做,它会在多呼叫环境中工作得更好,int newFontSize = (int) (widthRatio * 10);而不是int newFontSize = (int)(labelFont.getSize() * widthRatio);

  1. 因为它用于new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse))生成新字体,所以更新字体中的原始字体不支持粗体、斜体或颜色等。如果改为使用它会更灵活labelFont.deriveFont

  2. 该解决方案不提供对 HTML 标签文本的支持。(我知道这可能不是所提供答案代码的预期结果,但由于我有一个 HTML 文本JLabel,我JPanel正式发现了这个限制。FontMetrics.stringWidth()计算文本长度包括html 标签的宽度 - 即只是更多的文字)

我建议查看这个 SO question的答案,其中垃圾神的答案指向一个几乎相同的问题的许多不同答案(包括这个答案)。在该页面上,我将提供一个额外的答案,它将其他答案之一的速度提高 30-100 倍。

于 2015-06-09T06:57:21.150 回答
0

我试过这对我有用:

Label welcomeMsg = new JLabel("Contact us");

welcomeMsg.setBounds(200,10,100,25);

welcomeMsg.setFont( new Font("Serif",Font.PLAIN,22));
于 2022-01-15T18:21:12.880 回答