Как заставить JTextPane рисовать сглаженный шрифт? - PullRequest
2 голосов
/ 15 февраля 2010

в приложении Swing я отрисовываю текст с помощью пользовательского JComponent, используя Graphics.drawString(). Вот образец:
текст http://img525.imageshack.us/img525/4928/drawstringsample.jpg
в этом же приложении я отрисовываю текст, используя JTextPane. Вот образец:
альтернативный текст 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 ]

6 голосов
/ 08 декабря 2010

Это приведет к сглаживанию шрифта в 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);
            }
        };
5 голосов
/ 15 февраля 2010

putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY, null);

1 голос
/ 15 февраля 2010

Если вы хотите, чтобы ваш результат выглядел как верхний образец, то вы хотите отключить сглаживание.

В первом примере в вашем вопросе отключено сглаживание, а во втором - в *. 1005 *

Согласно http://mindprod.com/jgloss/antialiasing.html следующий код должен помочь:

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

Обратите внимание, что ссылка на com.sun.java.* сделает ваше приложение не переносимым на JVM не от Sun (и, возможно, на другие версии JVM Sun).

...