2011-11-16 53 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