Java: Как включить сглаживание текста в JTextField? - PullRequest
2 голосов
/ 21 декабря 2011

Это то, что у меня есть, но текст в поле не сглаживается. Я пытался погуглить, но не нашел ни одной темы, обсуждающей это (к моему большому удивлению). Кто-нибудь знает как это сделать?

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

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Я считаю полезным использовать TextLayout, показанный здесь , так как можно FontRenderContext обработать как isAntiAliased, так и *usesFractionalMetrics.

Пример использования BufferedImage является случайным.

0 голосов
/ 22 декабря 2011

Это то, что я решил сделать, пока не найду более элегантное решение - хорошо работает.

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);
   }
}
...