package javacodebook.media.text.antialias; import java.awt.*; import javax.swing.*; /** * Ein Label mit per Antialias geglättetem Text. */ public class AntialiasedLabel extends javax.swing.JPanel { private String text; public AntialiasedLabel(String text) { this.text = text; } /** * Text mit eingeschaltetem Antialising zeichnen. */ public void paintComponent(Graphics g) { //Das Panel korrekt darstellen super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; //Antialiasing einschalten g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.drawString(text, 0, 0 + getFont().getSize()); } /** * Das Panel hat eine optimale Größe, die von der Schriftart und -größe * abhängt. Diese werden hier berechnet. */ public Dimension getPreferredSize() { //Zur Laufweitenberechnung wird ein FontMetrics-Objekt benötigt FontMetrics fm = getFontMetrics(getFont()); //Länge des Textes in Pixel berechnen int width = fm.stringWidth(text); //Schriftgröße als Höhe int height = fm.getHeight(); return new Dimension(width, height); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().setLayout(new BorderLayout()); AntialiasedLabel l = new AntialiasedLabel("Mit Antialias"); Font font = new Font("Helvetica", Font.BOLD, 24); l.setFont(font); f.getContentPane().add(l, BorderLayout.NORTH); JLabel label = new JLabel("Ohne Antialias"); label.setFont(font); f.getContentPane().add(label, BorderLayout.SOUTH); f.pack(); f.show(); } }