随着字符串长度的增加自动更改 Swing 组件中的字体大小

Automatically changing the font size in a Swing component as the string length increases

我有一个 JTextField 显示这样的行号:2 或 2.1 或 2.1.1 等。我希望 JTextField 的大小始终保持不变,但我想要字体大小 decrease/increase 以便文本始终完全显示并填充文本字段。

我想知道是否有一种简单的方法可以做到这一点(我不介意使用不同的 swing 组件)或者我是否必须手动完成,即检查文本的大小并更改文本字段尺寸?

我显然不想这样做,因为尺寸增量可能不是一个很好的数字,例如2.1 到 2.1.1.

我不知道有任何组件执行此操作,但您可以通过扩展 jTextField 并使用 FontMetrics.stringWidth() 确定字体大小(例如,在重载时 setText)。

the JTextField becomes smaller as the font decreases.

文本字段的首选大小取决于字体。因此大小将随着字体大小的变化而 increase/decrease 。覆盖 JTextFieldgetPreferredSize() 方法以提供您自己的实现。

可能是这样的:

Font current = getFont();
setFont( UIManager.getFont("TextField.font") );
Dimension preferred = super.getPreferredSize();
setFont( current );
return preferred;