001 /** 002 * @author Václav Mikolášek 003 * nicklaus@students.zcu.cz 004 */ 005 006 package animace.panel; 007 008 import animace.*; 009 import javax.swing.*; 010 import javax.imageio.*; 011 import java.awt.*; 012 import java.awt.image.*; 013 import java.io.*; 014 015 /** 016 * Třída PictureButton umožňuje vytvorit tlačítko s libovolnou grafickou 017 * podobou. Pokud se divíte, že nikde neimplementuje metody z rozhraní Moveable 018 * tak je to proto, že dědí od JButtonu, kde jsou tyto metody již naimplementovany 019 */ 020 public class PictureButton extends JButton implements Moveable, PaintControled { 021 private BufferedImage img; 022 private PaintControl pc = null; 023 024 025 /** 026 * Konstruktor vytvoří tlačítko s obrázkem. 027 * @param img obrazek, který nahradí implicitní grafickou podobu tlačítka 028 */ 029 public PictureButton(BufferedImage img) { 030 this.img = img; 031 init(); 032 033 034 } 035 private void init() { 036 setBorder(null); //aby nemel obrazek oramovani, ktere je impicitne u JButtonu nastevno 037 setOpaque(false); //DULEZITE - opet implictine nastaveno na true, nutne zmenit (u JButtonu), aby nevznikal za PictureButtonem "neporadek" 038 setPreferredSize(new Dimension(img.getWidth(),img.getHeight())); 039 } 040 041 /** 042 * U Swing komponent je nevhodne překrývat metodu paint(Graphics g). Grafickou podobu tlačítka 043 * nastavíme v metodě paintComponent(Graphics g); 044 */ 045 public void paintComponent(Graphics g) { 046 g.drawImage(img,0,0,img.getWidth(),img.getHeight(),null); 047 } 048 049 /** 050 * Metoda z rozhraní PaintControled 051 */ 052 public void setPaintControl(PaintControl pc) { 053 this.pc = pc; 054 } 055 056 /** 057 * Metoda z rozhraní PaintControled 058 */ 059 public PaintControl getPaintControl() { 060 return pc; 061 } 062 }