Java:如何在JTextField中启用文本消除锯齿?
这是我到目前为止的内容,但是该字段中的文本不是反锯齿。我尝试了一段时间使用Google搜索,但找不到任何线索讨论它(很令我惊讶)。有谁知道如何做到这一点?Java:如何在JTextField中启用文本消除锯齿?
public class SearchField extends JTextField{
public SearchField(){
super();
this.setOpaque(false);
this.setPreferredSize(new Dimension(fieldWidth, fieldHeight));
this.setBorder(new EmptyBorder(4,8,4,8));
this.setFont(fieldFont);
}
public void paintComponent(Graphics paramGraphics){
Graphics2D g = (Graphics2D) paramGraphics;
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setColor(ColorConstants.LIGHT_GRAY);
g.fillRoundRect(0,0,fieldWidth,fieldHeight,4,4);
super.paintComponent(g);
}
}
这是我决定要做的,直到我能找到一个更优雅的解决方案 - 效果很好。
private class SearchField extends JTextField{
private final int fieldWidth = 375;
private final int fieldHeight = 30;
private final Font fieldFont = FontLoader.getCustomFont("Gotham-Bold.ttf", 15);
private final Color foreground = ColorConstants.SEARCH_FIELD_FOREGROUND;
private final Color background = ColorConstants.SEARCH_FIELD_BACKGROUND;
public SearchField(){
super();
this.setOpaque(false);
this.setPreferredSize(new Dimension(fieldWidth, fieldHeight));
this.setBorder(new EmptyBorder(5,5,5,5));
this.setFont(fieldFont);
this.setForeground(new Color(0,0,0,0));
this.setSelectedTextColor(new Color(0,0,0,0));
}
@Override
public void paintComponent(Graphics paramGraphics){
Graphics2D g = (Graphics2D) paramGraphics.create();
GraphicUtils.enableAntiAliasing(g); //RenderingHints
g.setColor(background);
g.fillRoundRect(0, 0, fieldWidth, fieldHeight, 4, 4);
super.paintComponent(g);
g.setColor(foreground);
g.drawString(this.getText(), 5, 20);
}
}
不确定GraphicUtils来自哪里,但是对于该行,可以执行以下操作:'g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);' – bobtheowl2 2012-02-13 15:32:26
这是我写的应用各种'RenderingHints'的类,但是谢谢。 :) – rtheunissen 2012-02-13 18:45:01
我发现它有助于使用TextLayout
,here显示,作为一个可以同isAntiAliased
和usesFractionalMetrics
调理FontRenderContext
。
这个例子的使用BufferedImage
是巧合。
在计算器上的帮助,也许这个问题:?如何使的JTextPane画反锯齿字体(http://stackoverflow.com/q/2266199/851432) – Jomoos 2011-12-21 09:16:33
'g.fillRoundRect(0,0 ,fieldWidth,fieldHeight,4,4);'这听起来像一个标准的'JTextField'上[自定义边框](http://stackoverflow.com/a/8463742/418556)的工作。 – 2011-12-21 09:29:06
如果一行简单的代码能够实现这个技巧,而且它的效率足够高,那么为什么还要使用自定义边框呢?但我必须承认,这是一个很好的观点。 – rtheunissen 2011-12-21 09:41:40