我正在尝试使用Java 1.6创建SWING应用程序,并且我有一个使用.ttf文件中的自定义字体的JLabel。
我认为默认情况下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);
}
});
}
}
在“T”和“A”上最为明显
我尝试创建一个重写paintComponent(Graphics g)并使用
的内部类Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)
但它不起作用。任何人都可以帮我解决这个问题吗?我无法在互联网上找到关于此的任何信息,因为Javaj 1.6应该使SWING相关的所有内容在默认情况下消除锯齿。
提前致谢!
答案 0 :(得分:3)
当您覆盖paintComponent
实例的JLabel
方法时,我认为您需要使用以下内容:
有关示例,请参阅:
答案 1 :(得分:3)
我认为字体抗锯齿的默认值因平台而异。你没有说你在哪个平台上。在任何情况下,设置文本抗锯齿渲染提示都应该修复它。
答案 2 :(得分:3)
另一种方法是使用TextLayout
并提供isAntiAliased
{{1}},如FontRenderContext
所示。