2011-11-16 50 views
4

我已經重寫了擴展JToggleButton的paintComponent方法,以便在按鈕切換時可以使用TexturePaint填充文本。我遇到的問題是我似乎無法使用相同的字體繪製文本,因爲我的外觀和感覺正在使用默認設置。我試過g2d.setFont(this.getFont()); ,其中「this」是我正在使用的按鈕。字體很接近,但在繪製時顯示的比默認文字更大膽。有沒有更好的方式來繪製文本,使其看起來與默認相同,除了顏色?提前致謝!在java中繪製文本,外觀和感覺問題

+0

爲了更快得到更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

回答

4

如果您正在覆蓋隨後的paintComponent()方法的圖形OBJ ect應該已經配置爲具有切換按鈕的字體。差異可能是由於抗鋸齒,這是默認打開的。

我發現了一些代碼,在非常有限的測試中適用於我。嘗試在的paintComponent()方法如下:

Graphics2D g2 = (Graphics2D)g.create(); 
Toolkit toolkit = Toolkit.getDefaultToolkit(); 
Map map = (Map)(toolkit.getDesktopProperty("awt.font.desktophints")); 

if (map != null) 
{ 
    g2.addRenderingHints(map); 
} 

g2.drawString(...); 
g2.dispose(); 

我被警告在此公告 - How to set text above and below a JButton icon? - 這不會在所有平臺和LAF的工作。該評論還提供了關於如何繪製文本的建議解決方案。

+0

我會如何將JLabel繪製到BufferedImage(如鏈接文章中的Kleopatra所建議的那樣)? – bendicott

+0

您可以使用[屏幕圖像](http://tips4java.wordpress.com/2008/10/13/screen-image/)課程。只是想知道你是否嘗試過我建議的代碼?你有問題嗎? – camickr

+0

在我的代碼中發現了一個錯誤;你發佈的代碼確實有效!現在我只需要正確定位文本,我很樂意去。謝謝您的幫助! – bendicott

3

這個問題是相似的,提供了一個答案:How do I get the default font for Swing JTabbedPane labels?

我不是很確定的關鍵是什麼,但下面這個問題的答案,你可能也想嘗試:

UIManager.getLookAndFeelDefaults().getFont("ToggleButton.font"); 

編輯

這不是鏈接問題的代碼片段,但經過一小段測試後,它似乎等同於:

UIManager.getDefaults().getFont("ToggleButton.font"); 

這是鏈接問題中給出的代碼。

EDIT 2

我想我已經找到了解決辦法。返回默認的僅僅是一個普通的字體,我身邊這讓與線樣品中:

this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.getFont().getStyle(), this.getFont().getSize())); 

我的建議(做,不是醜)是增加一些私人性質的默認字體樣式和大小你的類(你可以將它們設置在構造函數):

fontStyle = this.getFont().getStyle(); 
fontSize = this.getFont().getSize(); 

然後你可以用清理:

this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.fontStyle, this.fontSize)); 
+0

比其他按鈕還要大膽,不幸的是 – bendicott

+0

@bendicott您是否將Metal用作此項目的外觀和感覺? –

+0

是的,但我不確定這將永遠是LaF。我也試過g2d.setFont(MetalLookAndFeel.getControlTextFont()); ,但沒有改善。 – bendicott