2012-04-28 43 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