Java 如何制作我的JLabel';s文本,使用自定义字体,抗锯齿?
我正在尝试使用Java1.6创建一个SWING应用程序,我有一个JLabel,它使用.ttf文件中的自定义字体 我原以为1.6默认启用了抗锯齿功能,但我的文本是非常像素化的 以下是代码示例和显示结果的图像:Java 如何制作我的JLabel';s文本,使用自定义字体,抗锯齿?,java,swing,fonts,antialiasing,Java,Swing,Fonts,Antialiasing,我正在尝试使用Java1.6创建一个SWING应用程序,我有一个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.swin
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)
但它不起作用。有人能帮我解决这个问题吗?我在互联网上找不到任何关于这方面的信息,因为JavaJ1.6应该在默认情况下使所有与SWING相关的内容都具有抗锯齿功能
提前谢谢 当您重写
JLabel
实例的paintComponent
方法时,我相信您需要使用以下方法:
Isatariasied
,如图所示。我使用的是Windows Vista。但是,使用文本反序列化设置设置渲染提示不起作用。这只是个问题,因为这个主题不是我喜欢的Java主题,使用setFont(myFont)
(对于纯文本)使用myLabel.setText(someString)
,或者在特殊情况下myLabel.setText(htmlformatter)是不可能的
+1我不得不同意:简单可能更好,尽管我喜欢TextLayout
当我需要最好的指标时,例如复合控件。@Adam Smith,Odd。我自己还没有测试过。我假设您的实现非常类似于我链接您的RichJLabel
示例?很抱歉上次的评论,我在paintComponent方法中键入了错误的内容,它现在可以工作了!这比在构造函数中键入文本要复杂一些,但至少它可以工作。。。非常感谢,我真的很感谢你的帮助!不过,有一个问题:既然x,y坐标是最左边字母的基线,那么有没有一种方法可以轻松计算出这些坐标,从而使文本显示在相同的位置,就像我没有覆盖paintComponent时一样?@Adam Smith。没问题。好问题。这是我必须再考虑的事情。现在很忙!谢谢你的提问和回复D