Jumat, 24 Desember 2010

J2SE3-Swing Manipulation(Button)

Di bagian ini kita buat object yang biasanya kita teken2 neh....yup Button.....,Button mempunyai peran penting untuk memberikan event kepada program yang kita buat......
Sekarang kita buat buttonnya:
package coba;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import org.jdesktop.animation.timing.Animator;
import org.jdesktop.animation.timing.interpolation.PropertySetter;
import usu.util.GraphicsUtilities;

public class Button extends JButton {





    private static final long serialVersionUID = 1L;
    private boolean over;
    private boolean press;
    private Animator animation;
    private int percent;
    private BufferedImage image;
    private Color dark = new Color(1F, 1F, 1F, 0f);
    private Color light = new Color(1F, 1F, 1F, 0.4F);

    /**
     *
     * @return
     * @deprecated
     */
    @Deprecated
    public int getPercent() {
        return percent;
    }

    /**
     *
     * @param percent
     * @deprecated
     */
    @Deprecated
    public void setPercent(int percent) {
        this.percent = percent;
        repaint();
    }

    private boolean isOver() {
        return over;
    }

    private void setOver(boolean over) {
        this.over = over;
        repaint();
    }

    private boolean isPress() {
        return press;
    }

    private void setPress(boolean press) {
        this.press = press;
        repaint();
    }

    /**
     *
     */
    public Button() {
        super();
        super.setContentAreaFilled(false);
        super.setBorderPainted(false);
        setFocusPainted(false);
        setHorizontalTextPosition(JButton.CENTER);
        setVerticalTextPosition(JButton.BOTTOM);
        setFont(getFont().deriveFont(Font.BOLD));
        setForeground(Color.white);

        setUpAnimation();
        setOpaque(false);
/**
     * Memberi event object saat terkena mouse
     */
        addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(MouseEvent e) {
                super.mouseEntered(e);
                setOver(true);
                if (!animation.isRunning()) {
                    setPercent(-25);
                    animation.start();
                }
            }

            @Override
            public void mouseExited(MouseEvent e) {
                super.mouseExited(e);
                setOver(false);
            }

            @Override
            public void mousePressed(MouseEvent e) {
                super.mousePressed(e);
                setPress(true);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                super.mouseReleased(e);
                setPress(false);
            }
        });
    }

    @Override
    public void setContentAreaFilled(boolean b) {
        super.setContentAreaFilled(false);
    }

    @Override
    public void setBorderPainted(boolean b) {
        super.setBorderPainted(false);
    }

    @Override
    protected void paintComponent(Graphics g) {
        Shape s = new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 50, 50);
        Graphics2D g2 = (Graphics2D) g.create();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        if (isOver()) {
            if (isPress()) {
                GradientPaint paint = new GradientPaint(0, getHeight() - getHeight() * 3 / 4, dark, 0, getHeight(), light);
                g2.setPaint(paint);
                g2.fillRoundRect(0, 0, getWidth(), getHeight(), 50, 50);
            } else {
                GradientPaint paint = new GradientPaint(0, 0, light, 0, getHeight() * 3 / 4, dark);
                g2.setPaint(paint);
                g2.fillRoundRect(0, 0, getWidth(), getHeight(), 50, 50);
            }
        }

        super.paintComponent(g);

        if (animation.isRunning()) {
            g2.setClip(s);
            g2.setColor(new Color(1f, 1f, 1f, 0.3f));
            g2.fillRect(0, getHeight() * getPercent() / 100, getWidth(), getHeight() * 20 / 100);
            g2.dispose();
        }
    }

    @Override
    public void setIcon(Icon defaultIcon) {
        if (defaultIcon instanceof ImageIcon) {
            ImageIcon icon = (ImageIcon) defaultIcon;
            image = GraphicsUtilities.convertToBufferedImageReflection(icon.getImage());
            icon = new ImageIcon(image);
            super.setIcon(icon);
        } else {
            super.setIcon(defaultIcon);
        }
    }

    /**
     *
     */
    private void setUpAnimation() {
        animation = new Animator(300);
        animation.addTarget(new PropertySetter(this, "percent", 120));
    }
}

Semua yang penulis coba merupakan percobaan dari buku dan share bareng temen2 neh.....

Sumber: Buku Prentice.Hall.Filthy.Rich.Clients.Aug.2007(Buku top neh bosss.....cari j gratisannya...hehe)

Tidak ada komentar:

Posting Komentar