gpt4 book ai didi

java - FontMetrics 生成 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 15:21:09 25 4
gpt4 key购买 nike

我正在为 Java 簿记程序创建的 GUI 的一部分需要显示不同的字符串。在显示此 String 之前,它必须在适当的地方添加换行符。为此,我创建了一个扩展 JTextArea 的类,并重写了 setText() 方法:

public class ContentPane extends JTextArea {

private FontMetrics fm;

public ContentPane() {
super();
// Instatiate FontMetrics
}

public ContentPane(String string) {
super(string);
// Instatiate FontMetrics
}

@Override
public void setText(String text) {
int n;
String remainder;

while (fm.stringWidth(text) > maxStringWidth()) {
n = numberOfCharsToCut(text);
remainder = text.substring(text.length() - n);
text = text.substring(0, text.length() - n) + "\n" + remainder;
}

super.setText(text);
}

private int numberOfCharsToCut(String str) {
String newStr = str;
int i = 0;
while (fm.stringWidth(newStr) > maxStringWidth()) {
newStr = str.substring(0, str.length() - i);
i++;
}
return i;
}

private int maxStringWidth() {
return fm.stringWidth("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@lll");
}
}

代替“//Instatiate FontMetrics”,我尝试了一些不同的东西。起初我尝试使用“new”创建一个 FontMetrics 对象......

fm = new FontMetrics();

...只是发现您无法以这种方式实例化 FontMetrics。我尝试使用 getFontMetrics(font) 检索 FontMetrics 对象,从这个问题的答案中获取默认的 swing 字体:

How do I get the default font for Swing JTabbedPane labels?

我的代码是这样的:

fm = getFontMetrics(UIManager.getDefaults().getFont("TabbedPane.font"));

这引发了 NullPointerException。我也试过:

fm = getGraphics().getFontMetrics(UIManager.getDefaults().getFont("TabbedPane.font"));

这也给了我一个 NullPointerException。也许我不了解如何使用 FontMetrics。非常感谢任何见解。

编辑:好的,现在我又再次尝试了上面的两个片段,将 UIManager.getDefaults().getFont(...) 替换为 getFont()。抛出相同的 NullPointerException。

最佳答案

要确定问题所在,您应该尝试将抛出异常的物理行中的每个逻辑行分开。例如,

UIDefaults uiDefaults = UIManager.getDefaults();
Font font = uiDefaults.getFont("TabbedPane.font");
Graphics graphics = getGraphics();
fm = graphics.getFontMetrics(font);

我怀疑问题是没有在 UI 默认值中使用“TabbedPane.font”键注册的字体。为了克服这个问题,您应该能够通过 Component#getFont 方法直接从您的组件获取字体。无论如何,这确实是您想要的字体。

关于java - FontMetrics 生成 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com