2012-08-16 41 views
2

我正在爲我的大學制作一些軟件。一個GUI是必需的。在它的第一個版本中,我使用了System Look and Feel(因此它看起來像Linux/Mac/Windows中的本機應用程序)。我發現這很麻煩,因爲我必須根據操作系統使所有JLabel大小不同(不管分辨率/像素密度等)。使用Java開發跨平臺,不同平臺的字體縮放比例不同

做完這些之後,我好像「好吧,我不會再重複這一次」,所以我決定不使用系統外觀,並嘗試使用Nimbus。它在我測試過的平臺上看起來不錯,但JLabel/JTextField字體大小仍然無法在多個平臺上正確顯示,無論它們是否被指定(如Sans Serif 12)。有沒有辦法讓字體在所有平臺上真正具有通用性,並避免必須進行所有這些跨平臺測試?

+0

一點題外話:如果您在Windows上主要對象是,我會建議你堅持用系統的L&F.All專業的Swing應用程序試圖看上去Windows應用程序和L&F的其他人看起來很怪異大多數用戶在Windows上。 – Cratylus 2012-08-16 19:54:11

+0

實際的外觀和感覺設置並不重要。我只是希望它可以完全輕鬆使用,而無需爲不同的平臺進行太多更改。這個軟件只適用於大約20人,所以我沒有特定的目標。但是,上述問題相當普遍,將有助於我未來的跨平臺開發。 – snotyak 2012-08-16 20:03:44

+1

你使用佈局管理器嗎? – 2012-08-17 00:29:44

回答

2

如圖所示here,使用適當的layout managerpack()將允許組件利用它的首選大小,與平臺無關和字體。

image

3

您面臨的問題是每個平臺都相互獨立的事實。從內存(現在回到WAY),Java以72 dpi的分辨率渲染它的UI(最近可能已經改變了)。

你永遠不會從一個平臺獲得相同的結果。這歸結於各個平臺DPI設置的差異。

這也是網頁看起來與平臺不同的原因,也是爲什麼許多應用程序看起來略有不同。

您可以儘可能的小心計劃您的UI,並巧妙地使用Swings內部指標,而不是直接設置尺寸。

+0

這是不幸的,但它是現實的。要求一種適用於跨越大量不同解決方案的單一應用程序運行的萬能解決方案是相當天真的,但看到Java吹捧者正在「跨平臺」,看起來似乎更加合理。我想我最好的選擇是爲OSX,Linux和Windows開發獨特的版本,或者只是添加一些簡單的控制語句來設置基於當前使用平臺的字體大小。我很樂觀,所以我希望能有其他答案,但我幾乎肯定你是對的。謝謝 – snotyak 2012-08-16 20:47:20

+0

我想去第二個選擇(基於n平臺的基礎字體設置),你可以使用UIManger來實現這一點,但是,即使在同一個平臺上,你也會遇到不同,在我的30英寸屏幕上看起來很棒家庭運行的東西像120dpi,在我的22「/ 92dpi屏幕上看起來糟糕的工作;) – MadProgrammer 2012-08-16 21:18:35

2

你可以做的主要事情是使用特定 TrueType字體和捆綁它作爲您的應用程序的資源。通過這種方式,您可以在所有平臺上看到相同字體的最佳機會。不能保證「sans serif」在所有平臺上都是相同的 - Java將使用最接近的可用匹配。

你可以從你的.jar在運行時然後加載的字體與喜歡的東西:

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(filename) 
Font font = Font.createFont(Font.TRUETYPE_FONT, is); 

作爲第二個點,它始終是值得設計你的應用程序佈局,以便有靈活性合理數量字體大小。也許你只需要做出更多的空間,爲您的JLabel,或者在某些地方的文本繞排等