如何更改JLabel的字体大小以获取最大大小
我在容器中有一个JLabel。 字体的默认大小非常小。 我希望JLabel的文本能够最大化。
我怎样才能做到这一点 ? 谢谢 :)
不是最漂亮的代码,但是下面的代码会为JLabel
所谓的label
select一个合适的字体大小,以使内部文本尽可能地适合内部,而不会溢出标签:
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));
基本上,代码通过使用FontMetrics
对象来查看JLabel
的文本占用了多less空间,然后使用该信息确定可以使用的最大字体大小,而不会溢出JLabel
的文本。
上面的代码可以插入JLabel
的JFrame
的paint
方法中,或者当需要改变字体大小的时候调用一些方法。
以下是上述代码在屏幕上的截图:
label = new JLabel("A label"); label.setFont(new Font("Serif", Font.PLAIN, 14));
取自如何在Swing组件中使用HTML
JLabel textLabel = new JLabel("<html><span style='font-size:20px'>"+Text+"</span></html>");
标签源代码 – 如何更改颜色和字体(在Netbeans中)
jLabel1.setFont(new Font("Serif", Font.BOLD, 12)); jLabel1.setForeground(Color.GREEN);
只是想指出,接受的答案有几个限制(当我尝试使用它时发现)
- 正如所写的,它实际上不断重新计算字体大小基于以前的字体大小的比例…因此,在几个调用后,它已经使字体大小太大。 (例如,以12点作为您的DESIGNED字体开始,将标签扩展1个像素,发布的代码将计算字体大小为12 *(比如说)1.2(字段空间与文本的比率)= 14.4或14点字体。另外1个像素和电话,你在16点!)。
因此,在重复调用设置(例如, ComponentResizedListener
或自定义/修改的LayoutManager
)中使用它是不合适的(没有适应)。
列出的代码实际上假定起始大小为10磅,但是指的是当前字体大小,因此适合调用一次(在创build标签时设置字体的大小)。 如果它是int newFontSize = (int) (widthRatio * 10);
而不是int newFontSize = (int)(labelFont.getSize() * widthRatio);
-
因为它使用
new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse))
来生成新的字体,不支持更新的字体中原始字体的Bolding,Italic或Color等。 如果它使用labelFont.deriveFont
来代替它会更灵活。 -
该解决scheme不支持HTML标签文本。 (我知道这可能不是所提供的答案代码的预期结果,但由于我在我的
JPanel
上有一个HTML文本JLabel
,我正式发现了这个限制,FontMetrics.stringWidth()
计算文本的长度, 包括宽度的html标签 – 即只是更多的文字)
我build议寻找这个SO问题的答案,在这个问题中 ,垃圾回答的答案指向了几个不同的答案(包括这个答案)到一个几乎相同的问题。 在这个页面上,我将提供一个额外的答案,以30-100倍的速度加快其他答案之一。