2017-10-05 153 views
0

我有JFrame其中JTextArea在裏面。Java獲取字體大小

Font font = new Font("monospaced", Font.PLAIN, 14); 
textarea.setFont(font); 

由於字體是等寬字體,因此所有字符的寬度和高度都相同。

我想知道這個寬度和高度以像素爲單位。

爲此,我可以使用font.getStringBounds但我沒有Graphics上下文傳遞給它。 frame.getGraphics()返回null

如何查找角色的大小?可以在沒有Graphics實例的情況下完成嗎?無論如何,我不想要它的一個實例。我只想知道我的角色有多大。

+0

你的問題的首選大小是不明確的,可以爲用戶提供的代碼無效部分的詳細信息。 – 2017-10-05 10:31:38

+0

字體「大小」將基於渲染目標的上下文。通常你想看看'Graphics#getFontMetrics'或者其他一些相關的方法。如果您沒有可用的'Graphics'上下文,則可以創建'BufferedImage'並使用它。那麼問題就變成了一個問題,爲什麼你需要這些信息呢? – MadProgrammer

+0

@MadProgrammer謝謝,我會研究'BufferedImage'。僅供參考,我使用'JFrame' /'JTextarea'來渲染基於文本的遊戲,因此我將使用此信息來縮放文本並以字符爲單位獲取窗口的尺寸。 – Lolums

回答

1

您可以使用JFrame#getFontMetrics,因爲JFrame的超類之一是Component

如果這也不行,你也可以使用BufferedImage獲得Graphics對象:

BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 

可以使用image對象獲得的Graphics一個實例。

+0

不,我說的是JFrame#getFontMetrics不是圖形#getFontMetrics – Dinh

+0

我還添加了另一種獲取圖形對象的方法,因爲你認爲我的回答是錯誤的 – Dinh

+0

啊,我的壞!你是對的,這似乎工作。 – Lolums

1

僅供參考,我使用一個JFrame/JTextArea中呈現一個基於文本的遊戲,所以我將使用此信息爲以字符爲單位縮放文本和獲取窗口的尺寸

這可能不是最好的方法,這將是最好只使用JTextArea#setColumnsJTextArea#setRows,將使用基於字體信息做出決定它的首選大小自動

然後您可以利用LayoutManager API,並簡單地調用pack上該JFrame將圍繞打包內容的窗口,在此基礎上的首選大小

這也將影響JScrollPane

+0

Aha ,我嘗試過使用setRows和setCols,但不幸的是它們沒有效果。 – Lolums

+0

*「我嘗試過使用setRows和setCols,但它們不幸沒有任何效果」*然後發生其他錯誤,應該調查和解決。 –

+0

@Lolums我之前使用過這種技術很多次,並且它工作得很好,就像Andrew所說的那樣,如果它不工作,那很可能是因爲你正在做的其他事情 – MadProgrammer