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

时间:2010-02-15 13:28:17

标签: java swing antialiasing

在swing应用中,我使用JComponent使用自定义Graphics.drawString()呈现文字。这是一个样本:
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) paint()无效
  • putClientProperty( sun.swing.SwingUtilities2 .AA_TEXT_PROPERTY_KEY, Boolean.TRUE)提供java.lang.ClassCastException: java.lang.Boolean cannot be cast to sun.swing.SwingUtilities2$AATextInfo

3 个答案:

答案 0 :(得分:6)

这将导致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);
            }
        };

答案 1 :(得分:5)

putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, null);

答案 2 :(得分:1)

如果您希望结果看起来像上面的样本,那么您希望禁用抗锯齿。

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

根据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)。