2012-04-28 149 views
3

我遇到了Java Graphics2D绘制String的一个很奇怪的行为。Java Swing Graphics2D drawString启动缓慢?

如果设置一个字体名称,如

Font f = new Font("Helvetica", Font.PLAIN, 10); 

然后在屏幕设备上g2D.drawString第一呼叫可以采取多达600毫秒。这会造成屏幕堵塞,这并不重要,但非常烦人。

将字体名称切换为默认值,例如“等宽”将解决该问题。

任何人都遇到类似的问题?

+5

为什么不在启动时加载所需的'Font'实例? – 2012-04-28 02:53:42

+1

或请求字体系列'Font.SANS_SERIF'? – trashgod 2012-04-28 03:24:07

回答

3

发生这种情况是因为您正在将字体加载到paint方法内(当您第一次绘制字符串时),这是一件坏事。您应该设置组件的字体,如果它是您正在使用的唯一字体或至少在绘制组件之前加载它。

+0

嗨@mgarin不,我确定字体不是在paint方法中加载的。我在构造函数中加载了字体,第一次绘制花费了很长的时间。 另一个奇怪的是,如果我创建一个缓冲图像,bufferedImage.createGraphics()可能需要500 - 600ms才能完成。我不知道是否是因为我使用的iMac - 我在iMac 27上运行Windows 7。 谢谢您的回答! – 2012-05-02 15:02:54

+0

如何在调用paint方法之前加载Font?只需添加一行,如“Font font = new Font(...);”将不会初始化该字体 - 它只会创建一个Font对象来处理将在第一次真正的paint调用时加载的实际字体。我猜bufferedImage.createGraphics()可能需要一段时间,如果你正在创建一些大的图像(例如5000x5000),但我不确定 - 最好在单独的问题中提供一些代码与这个问题... – 2012-05-02 15:27:08