如何更改JLabel的字体大小以获取最大大小

时间:2010-04-26 16:32:03

标签: java fonts size containers jlabel

我在Container中有一个JLabel。 字体的默认大小非常小。 我希望JLabel的文字采用最大尺寸。

我该怎么做?

6 个答案:

答案 0 :(得分:107)

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

取自How to Use HTML in Swing Components

答案 1 :(得分:68)

不是最漂亮的代码,但以下内容会为名为JLabel的{​​{1}}选择合适的字体大小,以使内部文本尽可能适合内部而不会溢出标签:< / p>

label

基本上,代码通过使用JLabel对象查看FontMetrics中文本占用的空间,然后使用该信息确定可以使用的最大字体大小而不会溢出来自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的{​​{1}}方法中,该方法包含paint,或者在需要更改字体大小时调用的某些方法。

以下是上述代码的截图:

alt text http://coobird.net/img/growing-text.png

答案 2 :(得分:9)

 JLabel textLabel = new JLabel("<html><span style='font-size:20px'>"+Text+"</span></html>");

答案 3 :(得分:2)

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

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


jLabel1.setForeground(Color.GREEN);

答案 4 :(得分:1)

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

  1. 如上所述,它实际上会根据 之前的 字体大小的比例重新计算字体大小...因此,在几次调用之后,它已经渲染了字体大小太大了。 (例如,以12点作为您的DESIGNED字体开始,将标签仅展开1个像素,发布的代码将字体大小计算为12 *(例如)1.2(字段空间与文本的比率)= 14.4或14磅字体。还有1个像素和电话,你在16点!)。
  2. 因此不适合(不适应)在重复呼叫设置中使用(例如ComponentResizedListener或自定义/修改LayoutManager)。

    列出的代码有效地假定起始大小为10 pt但是指的是当前的字体大小,因此适合调用一次(在创建标签时设置字体的大小)。如果它int newFontSize = (int) (widthRatio * 10);而不是int newFontSize = (int)(labelFont.getSize() * widthRatio);

    ,它在多呼叫环境中会更好
    1. 因为它使用new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse))生成新字体,所以不支持更新字体中原始字体的Bolding,Italic或Color等。如果它使用labelFont.deriveFont代替它会更灵活。

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

    3. 我建议查看this SO question的答案,其中trashgod的答案指向一个几乎相同的问题的许多不同的答案(包括这一个)。在那个页面上,我将提供一个额外的答案,将其他答案之一加速30-100倍。

答案 5 :(得分:1)

JLabel label = new JLabel("Hello World");
label.setFont(new Font("Calibri", Font.BOLD, 20));