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 }