2011-12-21 4 views
2

Это то, что у меня есть до сих пор, но текст в поле не сглажен. Я пробовал поиграть в нее некоторое время, но не мог найти ни одной темы, обсуждая ее (к моему удивлению). Кто-нибудь знает как это сделать?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

Этого вопрос на StackOverflow возможна помощь: [? Как сделать JTextPane краски сглаживания шрифта] (http://stackoverflow.com/q/2266199/851432) – Jomoos

+0

'g.fillRoundRect (0,0 , fieldWidth, fieldHeight, 4,4); 'Это похоже на задание для [пользовательской границы] (http://stackoverflow.com/a/8463742/418556) на стандартном' JTextField'. –

+0

Если одна простая строка кода делает трюк, и это достаточно эффективно, зачем беспокоиться о пользовательской границе? Должен признаться, но хороший момент. – rtheunissen

ответ

0

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

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

+0

Это класс, который я написал для применения различных' RenderingHints', но спасибо. :) – rtheunissen

1

Я нашел, что это полезно использовать TextLayout, показанный here, как можно кондиционировать FontRenderContext как с isAntiAliased и usesFractionalMetrics.

Пример использования BufferedImage является совпадением.

Смежные вопросы