我在Container中有一个JLabel
。
字体的默认大小非常小。
我希望JLabel
的文字采用最大尺寸。
我该怎么做?
答案 0 :(得分:107)
label = new JLabel("A label");
label.setFont(new Font("Serif", Font.PLAIN, 14));
答案 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
,或者在需要更改字体大小时调用的某些方法。
以下是上述代码的截图:
答案 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)
只是想指出接受的答案有一些限制(我在尝试使用它时发现了这些限制)
因此不适合(不适应)在重复呼叫设置中使用(例如ComponentResizedListener
或自定义/修改LayoutManager
)。
列出的代码有效地假定起始大小为10 pt但是指的是当前的字体大小,因此适合调用一次(在创建标签时设置字体的大小)。如果它int newFontSize = (int) (widthRatio * 10);
而不是int newFontSize = (int)(labelFont.getSize() * widthRatio);
因为它使用new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse))
生成新字体,所以不支持更新字体中原始字体的Bolding,Italic或Color等。如果它使用labelFont.deriveFont
代替它会更灵活。
该解决方案不支持HTML标签文本。 (我知道这可能不是所提供的答案代码的预期结果,但是因为我在JLabel
上有一个HTML文本JPanel
,我正式发现了这个限制。FontMetrics.stringWidth()
计算文本长度为html标签宽度的包含 - 即只是更多文字)
我建议查看this SO question的答案,其中trashgod的答案指向一个几乎相同的问题的许多不同的答案(包括这一个)。在那个页面上,我将提供一个额外的答案,将其他答案之一加速30-100倍。
答案 5 :(得分:1)
JLabel label = new JLabel("Hello World");
label.setFont(new Font("Calibri", Font.BOLD, 20));