如何使JTextPane绘制抗锯齿字体?

在swing应用程序中,我使用Graphics.drawString()使用自定义JComponent渲染文本。 这是一个示例:
aa text http://img525.imageshack.us/img525/4928/drawstringsample.jpg
在同一个应用程序中,我使用JTextPane渲染文本。 这是一个示例:
alt text http://img28.imageshack.us/img28/1134/jtextpanesample.jpg

你能注意到较低的样品有点“污迹”吗? 好吧,我无法弄清楚如何让它看起来像上面的样本。

谢谢,asaf 🙂


更新:

  • System.setProperty("awt.useSystemAAFontSettings","false")"lcd"也不起作用。
  • ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF)不起作用
  • putClientProperty( sun.swing.SwingUtilities2 .AA_TEXT_PROPERTY_KEY, Boolean.TRUE)给出java.lang.ClassCastException: java.lang.Boolean cannot be cast to sun.swing.SwingUtilities2$AATextInfo

这将导致JLabel中的抗锯齿字体。 确保你调用super.paintComponent(g); 设置RenderingHints后。

 JLabel lblFont = new JLabel(){ @Override public void paintComponent(Graphics g) { Graphics2D graphics2d = (Graphics2D) g; graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); super.paintComponent(g); } }; 

putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, null);

如果希望结果看起来像上面的样本,则需要禁用抗锯齿。

您问题中的第一个示例禁用了抗锯齿,第二个示例启用了它。

根据http://mindprod.com/jgloss/antialiasing.html ,以下代码应该有所帮助:

 jtextArea.putClientProperty(com.sun.java.swing.SwingUtilities2.AA_TEXT_PROPERTY_KEY, Boolean.TRUE); 

请注意,对com.sun.java.*的引用将使您的应用程序不可移植到非Sun JVM(可能还有不同版本的Sun JVM)。