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); 
    } 
    } 
+0

在计算器上的帮助,也许这个问题:?如何使的JTextPane画反锯齿字体(http://*.com/q/2266199/851432) – Jomoos 2011-12-21 09:16:33

+0

'g.fillRoundRect(0,0 ,fieldWidth,fieldHeight,4,4);'这听起来像一个标准的'JTextField'上[自定义边框](http://*.com/a/8463742/418556)的工作。 – 2011-12-21 09:29:06

+0

如果一行简单的代码能够实现这个技巧,而且它的效率足够高,那么为什么还要使用自定义边框呢?但我必须承认,这是一个很好的观点。 – rtheunissen 2011-12-21 09:41:40

这是我决定要做的,直到我能找到一个更优雅的解决方案 - 效果很好。

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); 
    } 
} 
+1

不确定GraphicUtils来自哪里,但是对于该行,可以执行以下操作:'g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);' – bobtheowl2 2012-02-13 15:32:26

+0

这是我写的应用各种'RenderingHints'的类,但是谢谢。 :) – rtheunissen 2012-02-13 18:45:01

我发现它有助于使用TextLayouthere显示,作为一个可以同isAntiAliasedusesFractionalMetrics调理FontRenderContext

这个例子的使用BufferedImage是巧合。