Как я могу сделать текст моего JLabel, используя собственный шрифт, сглаженный? - PullRequest
4 голосов
/ 23 августа 2011

Я пытаюсь создать приложение SWING, используя Java 1.6, и у меня есть JLabel, который использует нестандартный шрифт из файла .ttf.

Я думал, что 1.6 по умолчанию имеет сглаживание, но мойтекст довольно пикселизирован.

Вот пример кода и изображение, показывающее результат:

package aceprobowler.test;

import java.awt.Color;
import java.awt.Font;
import java.io.InputStream;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import aceprobowler.options.OptionsValues;

public class TestAntialiasedText extends JFrame
{
    private static final long serialVersionUID = 2411330284507353990L;

    public TestAntialiasedText(String title)
    {
        super(title);
        setSize(800,200);

        Font titleFont = null;

        try
        {
            InputStream is = OptionsValues.class.getResourceAsStream("fonts//KOMIKAX_.ttf");
            titleFont = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(Font.PLAIN, 60);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            System.err.println("font not loaded.  Using serif font.");
            titleFont = new Font("serif", Font.PLAIN, 24);
        }

        JPanel panelWithText = new JPanel();
        JLabel labelWithText = new JLabel("This is a test");

        labelWithText.setFont(titleFont);

        labelWithText.setBackground(Color.BLACK);
        labelWithText.setForeground(Color.WHITE);
        labelWithText.setOpaque(true);

        panelWithText.add(labelWithText);
        add(panelWithText);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new TestAntialiasedText("Testing text anti-alias").setVisible(true);
            }
        });
    }
}

В основном видно на букву "Т" и на букву "А" Not anti-aliased text

Я пытался создать внутренний класс, переопределяющий paintComponent (Graphics g) и используя

Graphics2D g2 = (Graphics2D)g; 
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)

Но это не работает.Кто-нибудь может мне помочь с этим?Я не могу найти в Интернете никакой информации об этом, поскольку Javaj 1.6 по умолчанию должен делать все, что связано с SWING, с псевдонимом.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 23 августа 2011

Я считаю, что сглаживание шрифтов по умолчанию зависит от платформы.Вы не говорите, на какой платформе вы находитесь.В любом случае, установка подсказки по сглаживанию текста должна исправить это.

3 голосов
/ 23 августа 2011

Другой подход заключается в использовании TextLayout и предоставлении FontRenderContext, что isAntiAliased, как показано здесь .

3 голосов
/ 23 августа 2011

Когда вы переопределяете метод paintComponent экземпляра JLabel, я считаю, что вам нужно будет использовать следующее:

Например, см .:

...