Mega Code Archive

 
Categories / Java Tutorial / Swing
 

How an icon is adapted to a component

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JFrame; public class IconAdapterTester {   public static void main(String[] args) {     Icon icon = new MyIcon(300);     JComponent component = new IconAdapter(icon);     JFrame frame = new JFrame();     frame.add(component, BorderLayout.CENTER);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.pack();     frame.setVisible(true);   } } class IconAdapter extends JComponent {   public IconAdapter(Icon icon) {     this.icon = icon;   }   public void paintComponent(Graphics g) {     icon.paintIcon(this, g, 0, 0);   }   public Dimension getPreferredSize() {     return new Dimension(icon.getIconWidth(), icon.getIconHeight());   }   private Icon icon; } class MyIcon implements Icon {   public MyIcon(int aWidth) {     width = aWidth;   }   public int getIconWidth() {     return width;   }   public int getIconHeight() {     return width / 2;   }   public void paintIcon(Component c, Graphics g, int x, int y) {     Graphics2D g2 = (Graphics2D) g;     Rectangle2D.Double body = new Rectangle2D.Double(x, y + width / 6,         width - 1, width / 6);     Ellipse2D.Double frontTire = new Ellipse2D.Double(x + width / 6, y + width         / 3, width / 6, width / 6);     Ellipse2D.Double rearTire = new Ellipse2D.Double(x + width * 2 / 3, y         + width / 3, width / 6, width / 6);     g2.fill(frontTire);     g2.fill(rearTire);     g2.setColor(Color.BLACK);     g2.fill(body);   }   private int width; }